在 SQL 中使用 REGEXP 函数在大写字母和它前面的小写字母之间插入下划线
Use REGEXP functions in SQL to insert underscores between capitalized letters and a lowercase letter that precedes it
生成所需结果的正确 REGEXP 语法是什么?谢谢!
Table 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 中我会这样做。寻找任何大小写的字母后跟一个大写字母,并将每个字母放在自己的组中,这样它们就是 "remembered"。然后用中间的下划线替换它们。每个记住的组按 \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])', '_') fixed
from tbl;
USER_ID FIXED
---------- ------------------------------
123 Miami_Florida
234 Philadelphia_Pennsylvania
345 Cleveland_Ohio
生成所需结果的正确 REGEXP 语法是什么?谢谢!
Table 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 中我会这样做。寻找任何大小写的字母后跟一个大写字母,并将每个字母放在自己的组中,这样它们就是 "remembered"。然后用中间的下划线替换它们。每个记住的组按 \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])', '_') fixed
from tbl;
USER_ID FIXED
---------- ------------------------------
123 Miami_Florida
234 Philadelphia_Pennsylvania
345 Cleveland_Ohio