Используйте функции 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