Используйте функции REGEXP в SQL для вставки символов подчеркивания между заглавными и строчными буквами, которые предшествуют ему

Каков правильный синтаксис REGEXP для получения желаемого результата? Спасибо!

Таблица 1 выглядит так:

user_id      city_state
123          MiamiFlorida
234          PhiladelphiaPennsylvania
345          ClevelandOhio

Я хотел бы, чтобы это выглядело так:


user_id      city_state
123          Miami_Florida
234          Philadelphia_Pennsylvania
345          Cleveland_Ohio

====== РЕДАКТИРОВАНИЕ ======

После применения логики @Gary_W через Presto вернул следующий результат:

 USER_ID    FIXED
---------- ------------------------------
       123 Miam1_2lorida
       234 Philadelphi1_2ennsylvania
       345 Clevelan1_2hio

Как нам сохранить последнее письмо?

1 ответ

Решение

Вы не указали RDBMS, но в Oracle я бы сделал что-то подобное. Ищите букву любого случая, за которой следует заглавная буква, и поместите каждый в свою группу, чтобы они были "запомнены". Затем замените их подчеркиванием между ними. На каждую запоминаемую группу ссылаются в порядке \1, \2 и т. Д.

Вы должны быть в состоянии адаптировать регулярное выражение к вашему вкусу.

РЕДАКТИРОВАТЬ - плакат использует Presto, и этот инструмент использует знак доллара вместо обратной косой черты перед запомненным номером группы.

SQL> with tbl(user_id,city_state) as (
      select 123, 'MiamiFlorida' from dual union all
      select 234, 'PhiladelphiaPennsylvania' from dual union all
      select 345, 'ClevelandOhio' from dual
    )
    select user_id,
           regexp_replace(city_state, '([a-zA-Z])([A-Z])', '\1_\2') fixed
    from tbl;

   USER_ID FIXED
---------- ------------------------------
       123 Miami_Florida
       234 Philadelphia_Pennsylvania
       345 Cleveland_Ohio
Другие вопросы по тегам