преобразовать строку в запрос mysql с помощью регулярного выражения

#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 столбец, чтобы он соответствовал этому шаблону:

  1. Возьмите слова из keyword столбца.
  2. Удалите header_ префикс.
  3. Замените подчеркивания _ пробелами .
  4. Добавить 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 . . . Изменение вашего вопроса после того, как на него был дан ответ, может привести к аннулированию ответов. Это считается невежливым.