#mysql #replace #substring
#mysql #заменить #подстрока
Вопрос:
Я по ошибке обновил столбец в базе данных MySQL и присвоил каждой строке одинаковое значение, подобное этому:
ID keyword Default_value
1 header_HOME EXCURSIONS
2 footer_APARTMENTS EXCURSIONS
3 index_Excursions EXCURSIONS
4 header_Sea_Excursions EXCURSIONS
5 home_Desert_Safari EXCURSIONS
6 header_Sight_Seeing EXCURSIONS
7 apartment_Shore_excursions EXCURSIONS
8 header_Plan_excursions EXCURSIONS
9 header_Others EXCURSIONS
10 header_Hotels EXCURSIONS
чтобы было так
ID keyword Default_value
1 header_HOME HOME
2 footer_APARTMENTS APARTMENTS
3 index_Excursions Excursions
4 header_Sea_Excursions Sea Excursions
5 home_Desert_Safari Desert Safari
6 header_Sight_Seeing Sight Seeing
7 apartment_Shore_excursions Shore_excursions
8 header_Plan_excursions Plan_excursions
9 header_Others Others
10 header_Hotels Hotels
Теперь мне нужно обновить Default_value
столбец, чтобы он соответствовал этому шаблону:
- Возьмите слова из
keyword
столбца. - Удалите
header_
префикс. - Замените подчеркивания
_
пробелами.
- Добавить
Excursions
в конце.
Результат будет эквивалентен выполнению подобной команды для каждой строки:
UPDATE `my_table` SET `Default_value` = 'Desert_Safari' WHERE `id` = 5
Комментарии:
1. Обычно в этом нет ничего "критического". Просто преобразование строки. Что ж, я полагаю, кто-нибудь сделает эту работу за вас.
2. На каком языке вы бы выполняли регулярное выражение?
Ответ №1:
Я думаю, это сделает то, что вы хотите:
update table t
set default_value = concat(replace(substring(keyword, 8), '_', ' '), ' Excursions')
Я думаю, что это проще с базовыми строковыми функциями, чем с использованием регулярных выражений.
Комментарии:
1. 1 Я начал писать и отвечать подобным образом, а затем понял, что мне не хватает понимания спецификаций OPs. Этот ответ правильный, IMO, поэтому я не буду беспокоиться о конкурирующем ответе.
2. Вам нужно объединить "Экскурсии" до конца.
3. ключевые слова не только home, это переменная, я обновляю свой вопрос
4. @shmosel . . . Я делаю это сейчас. Вопрос изменился после того, как я ответил на него.
5. @tito11 . . . Изменение вашего вопроса после того, как на него был дан ответ, может привести к аннулированию ответов. Это считается невежливым.