如果包含某些字符串 postgres 则拆分文本
Posted
技术标签:
【中文标题】如果包含某些字符串 postgres 则拆分文本【英文标题】:split text if contains certain string postgres 【发布时间】:2021-10-31 22:12:31 【问题描述】:exit_reason
sr_inefficient_management
tech_too_complex
company_member_resignation
sr_product_engagement
sr_contractual_reasons
sr_contractual_reasons-expectation_issues
sr_churn-takeover_business
如果值包含字符串“sr_”,我想拆分列,并保持其余部分不变。如果该列包含“-”例如“sr_contractual_reasons-expectation_issues”,我只想将其保留为“合同原因”。 到目前为止,我的想法是使用
case when exit_reason like '%inefficient_management%' then 'inefficient management'
但是如果有很多不同的值,我就有麻烦了。
预期输出
exit_reason column
tech too complex
company member resignation
product engagement
contractual reasons
contractual reasons
churn
【问题讨论】:
【参考方案1】:你可以直接替换'sr_'
replace(exit_reason, 'sr_', '')
'sr_'
不太可能出现在任何原因中。但是您可以使用regexp_replace()
来确定:
regexp_replace(exit_reason, '^sr_', '')
【讨论】:
【参考方案2】:你可以试试类似的:
REPLACE(
CASE
WHEN exit_reason LIKE '%-%'
THEN split_part(exit_reason,'-',2)
WHEN exit_reason LIKE 'sr_%'
THEN split_part(exit_reason,'sr_',2)
ELSE exit_reason
END
, '_', ' '
)
此代码首先检查“exist_reason”是否有连字符,然后检查是否有“sr_”并将所有下划线替换为空格。
【讨论】:
【参考方案3】:要同时删除后缀,您可以使用:
SELECT replace(
regexp_replace(
'sr_contractual_reasons-expectation_issues',
'^(sr_)?([^-]*).*$',
'\2'
),
'_',
' '
);
replace
═════════════════════
contractual reasons
(1 row)
正则表达式匹配一个可选的前导sr_
,然后是所有字符,直到第一个-
,然后是后面的任何字符,并且只保留中间部分。 replace
然后用空格替换下划线。
【讨论】:
以上是关于如果包含某些字符串 postgres 则拆分文本的主要内容,如果未能解决你的问题,请参考以下文章
如果不包含某些字符串,则替换某些子值?还是重写 XPATH 查询?网站抓取
如果字符串包含 PySpark 中的某些子字符串,则替换字符串