2015-10-21 51 views
2

我有一個MySQL數據庫中的speed列表。更新現有的列數據MySQL

速度

100 Mbits 
120 Mbits 

我試圖更新此列從該列中刪除Mbits一部分。

我可以有一個就地查詢可以做這個任務嗎?

我試着用谷歌搜索建議split_str函數看起來很複雜這個任務。

任何幫助,非常感謝。

問候, 馬丹

回答

2

使用此:

Update table set speed=LEFT(speed, INSTR(speed, ' ') - 1) 

結果將是來自:

100 Mbits 
120 Mbits 

100 
120 
+0

或'speed = REPLACE(speed,'Mbits','')' – spencer7593

+1

請解釋你的答案。 –

3

您可以使用replace做到這一點。

update mytable set speed = replace(speed, 'Mbits', '') 
where lower(speed) like '%mbits%' 

編輯:乘以1000在速度中包含Mbits

update mytable set speed = 1000 * cast(replace(speed, 'Mbits', '') as signed) 
where lower(speed) like '%mbits%' 
+1

還可以選擇添加WHERE速度LIKE '%兆位%' 。 (如果只有一些行有Mbits)。減少事務大小。 – jarlh

+0

sure @jarlh ..我添加了過濾器 –

+0

@jarlh很可能它沒有mbits值的索引,所以添加過濾器意味着全表掃描,再加上在文本中使用LIKE來搜索,我認爲比'替換'更有效率。所以添加過濾器很可能會降低速度。 ;-) –

2

可以使用SUBSTRING_INDEX。是這樣的:

UPDATE table 
SET speed = SUBSTRING_INDEX(speed,'Mbits', 1); 
WHERE speed LIKE '%Mbits%'