【问题标题】:Using regex within a case statement to pull out dynamic content在 case 语句中使用正则表达式提取动态内容
【发布时间】:2015-10-15 17:19:39
【问题描述】:

我正在使用具有以下结构的 URL 字符串:

URL 
page/wa/seattle
page/ca/sandiego
page/mi/detroit

我基本上想知道是否可以将 Regex 与 case 语句结合使用来创建以下内容:

Page        State      City 
page        wa         seattle
page        ca         sandiego
page        mi         detroit

我目前编写的代码可以找出哪些页面是州页面,哪些页面是城市页面。

CASE WHEN (regexp_instr(HITSPAGEPAGEPATH::text, '^/page/[a-z]{2}/[a-z]+':: 
           CHARACTER VARYING::text)) 
     THEN (regexp_instr(HITSPAGEPAGEPATH::text, 
           '^/page/[a-z]{2}/[a-z]+'::CHARACTER VARYING::text)) 
     ELSE NULL 
END AS city 

我无法弄清楚的部分是我可以在“then”之后放置什么以仅显示城市或州。这是用于 Amazon redshift 上的 postgres sql 使用 sql 工作台,如果这有助于回答什么语法在。

【问题讨论】:

    标签: regex case amazon-redshift


    【解决方案1】:

    不需要正则表达式,只需将字符串拆分为 3 个元素(以/ 分隔)并将每个元素用作一列:

    select elements[1] as page, 
           elements[2] as state,
           elements[3] as city
    from (
       select string_to_array(hitspagepagepath, '/') as elements
       from the_table
    ) t
    order by page;
    

    【讨论】:

    • 我收到一条错误消息,提示“t 中不存在列“元素”
    • 感谢您指出不需要正则表达式,但我提出的建议是否可行?
    • @camacnei:抱歉,忘记了列别名。
    • 哎呀,现在出现了另一个错误。 Redshift 不支持“string_to_array” :(
    • 感谢您的帮助!
    【解决方案2】:
        select hitspagepagepath, split_part(hitspagepagepath,'/',2) as root_url,
                         split_part(hitspagepagepath,'/',3) as State,
                         split_part(hitspagepagepath,'/',4) as City
        from Table
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 2015-12-10
      • 2012-04-30
      • 1970-01-01
      • 2011-04-07
      • 2021-07-11
      • 2011-07-23
      • 2017-06-26
      相关资源
      最近更新 更多