如果包含某些字符串 postgres,则拆分文本
split text if contains certain string postgres
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
你可以直接替换'sr_'
replace(exit_reason, 'sr_', '')
'sr_'
不太可能出现在任何原因中。但是可以用regexp_replace()
来确定:
regexp_replace(exit_reason, '^sr_', '')
你可以尝试类似的方法:
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_' 并将所有下划线替换为空格。
要同时删除后缀,您可以使用:
SELECT replace(
regexp_replace(
'sr_contractual_reasons-expectation_issues',
'^(sr_)?([^-]*).*$',
''
),
'_',
' '
);
replace
═════════════════════
contractual reasons
(1 row)
正则表达式匹配一个可选的前导 sr_
,然后是第一个 -
之前的所有字符,然后是后面的任何字符,只保留中间部分。 replace
然后用空格替换下划线。
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
你可以直接替换'sr_'
replace(exit_reason, 'sr_', '')
'sr_'
不太可能出现在任何原因中。但是可以用regexp_replace()
来确定:
regexp_replace(exit_reason, '^sr_', '')
你可以尝试类似的方法:
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_' 并将所有下划线替换为空格。
要同时删除后缀,您可以使用:
SELECT replace(
regexp_replace(
'sr_contractual_reasons-expectation_issues',
'^(sr_)?([^-]*).*$',
''
),
'_',
' '
);
replace
═════════════════════
contractual reasons
(1 row)
正则表达式匹配一个可选的前导 sr_
,然后是第一个 -
之前的所有字符,然后是后面的任何字符,只保留中间部分。 replace
然后用空格替换下划线。