我有一個MySQL數據庫中的speed
列表。更新現有的列數據MySQL
速度
100 Mbits
120 Mbits
我試圖更新此列從該列中刪除Mbits
一部分。
我可以有一個就地查詢可以做這個任務嗎?
我試着用谷歌搜索建議split_str
函數看起來很複雜這個任務。
任何幫助,非常感謝。
問候, 馬丹
我有一個MySQL數據庫中的speed
列表。更新現有的列數據MySQL
速度
100 Mbits
120 Mbits
我試圖更新此列從該列中刪除Mbits
一部分。
我可以有一個就地查詢可以做這個任務嗎?
我試着用谷歌搜索建議split_str
函數看起來很複雜這個任務。
任何幫助,非常感謝。
問候, 馬丹
使用此:
Update table set speed=LEFT(speed, INSTR(speed, ' ') - 1)
結果將是來自:
100 Mbits
120 Mbits
要
100
120
您可以使用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%'
還可以選擇添加WHERE速度LIKE '%兆位%' 。 (如果只有一些行有Mbits)。減少事務大小。 – jarlh
sure @jarlh ..我添加了過濾器 –
@jarlh很可能它沒有mbits值的索引,所以添加過濾器意味着全表掃描,再加上在文本中使用LIKE來搜索,我認爲比'替換'更有效率。所以添加過濾器很可能會降低速度。 ;-) –
可以使用SUBSTRING_INDEX。是這樣的:
UPDATE table
SET speed = SUBSTRING_INDEX(speed,'Mbits', 1);
WHERE speed LIKE '%Mbits%'
或'speed = REPLACE(speed,'Mbits','')' – spencer7593
請解釋你的答案。 –