2015-10-21 2 views
2

У меня есть таблица с столбцом speed в базе данных MySQL.Обновление существующих данных столбца MySQL

скорость

100 Mbits 
120 Mbits 

Я пытаюсь обновить эту колонку, чтобы удалить Mbits часть из этой колонки.

Могу ли я получить запрос, который может выполнить эту задачу?

Я пробовал поиск по Google, который предложил split_str функция, которая выглядит сложной для этой задачи.

Любая помощь очень ценится.

С уважением, Мадан

ответ

2

Используйте это:

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

Результат будет от:

100 Mbits 
120 Mbits 

Для

100 
120 
+0

или, 'speed = REPLACE (скорость, 'Mbits', '')' – spencer7593

+1

Пожалуйста, объясните свой ответ. –

3

Вы можете использовать replace, чтобы сделать это.

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

Edit: Умножив на 1000, где скорость содержит Mbits

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

И необязательно добавить, где скорость LIKE '% Mbits%' , (Если только некоторые из строк имеют 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%' 
Смежные вопросы