Snowflake/SQL按条件拆分字符串:保留最后分隔符前内容
解决方案
方法1:使用REVERSE + SPLIT_PART(逻辑直观,推荐)
通过反转字符串拆分后再还原的思路,同时兼容无下划线的边界场景:
SELECT col1, NVL(REVERSE(SPLIT_PART(REVERSE(col1), '_', 2)), col1) AS target_result FROM your_table;
逻辑说明:
REVERSE(col1):将原字符串反转,例如abc_def_xyz转为zyx_fed_cbaSPLIT_PART(..., '_', 2):按下划线拆分反转后的字符串,取第2段(对应原字符串最后一个下划线之前的内容反转结果)REVERSE(...):将拆分得到的内容反转回原顺序,得到目标结果NVL(..., col1):若原字符串无下划线,SPLIT_PART返回null,此时直接返回原字符串
方法2:使用REGEXP_REPLACE(正则方式)
通过正则匹配最后一个下划线及后续内容并替换为空,无需额外处理无下划线场景:
SELECT col1, REGEXP_REPLACE(col1, '_[^_]*$', '') AS target_result FROM your_table;
逻辑说明:
- 正则
_[^_]*$的含义:_:匹配单个下划线[^_]*:匹配任意数量的非下划线字符$:匹配字符串结尾
- 整个正则会精准匹配最后一个下划线及其后的所有内容,替换为空后即得到目标部分;若原字符串无下划线,正则匹配失败,直接返回原字符串
测试验证
针对不同输入场景的输出结果:
- 输入
abc_def→ 输出abc - 输入
abc_def_xyz→ 输出abc_def - 输入
abc→ 输出abc - 输入
a_b_c_d→ 输出a_b_c
内容的提问来源于stack exchange,提问作者Dhiraj Bezbaruah
相关产品推荐
相关产品推荐

