在 case 语句中使用正则表达式提取动态内容
Posted
技术标签:
【中文标题】在 case 语句中使用正则表达式提取动态内容【英文标题】:Using regex within a case statement to pull out dynamic content 【发布时间】: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 工作台,如果这有助于回答什么语法在。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于在 case 语句中使用正则表达式提取动态内容的主要内容,如果未能解决你的问题,请参考以下文章