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

时间:2017-10-20 20:33:38

标签: sql presto

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

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

1 个答案:

答案 0 :(得分:2)

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