在SQL中使用REGEXP函数可以在大写字母和其前面的小写字母之间插入下划线



生成所需结果的正确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

======编辑======

通过Presto应用@Gary_W的逻辑后,返回以下结果:

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

我们如何保留最后一封信?

您没有指定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

最新更新