如何在Redshift中提取方括号与减号之间的字符串
解决Redshift中提取指定区间字符串的问题
你可以利用Redshift的REGEXP_SUBSTR正则提取函数来实现需求,这个方法比嵌套substring和charindex更直观且不易出错。
实现语句
SELECT TRIM(REGEXP_SUBSTR(note_internal, '\[(.*?)\s*-', 1, 1, 'e')) AS result FROM your_table_name;
语句说明
\[(.*?)\s*-:正则表达式的含义\[:匹配左方括号[(需转义,因为[在正则中是特殊字符)(.*?):非贪婪匹配任意字符,将目标内容捕获到分组1中\s*-:匹配-前的任意空格(包括0个)和-本身
REGEXP_SUBSTR参数:1表示从字符串第1位开始匹配,1表示取第一个匹配结果,'e'表示返回捕获分组的内容TRIM:去除提取内容前后可能存在的多余空格
测试验证
用你提供的示例数据测试,结果完全符合预期:
| note_internal | result |
|---|---|
| package received by [THP - (YBS)]; notes: (Status Manual by jack) | THP |
| package received by [THP Head Office TRIP 1 - (HO)]; notes: (Status Manual by jack) | THP Head Office TRIP 1 |
原语句问题分析
你之前的substring语句出错原因:
- 使用
charindex('-', note_internal)匹配第一个-,结合reverse计算的却是最后一个-的位置,两者差值逻辑错误,导致截取长度不对 - 未处理
[和-之间的空格,会导致结果包含多余空白字符
内容的提问来源于stack exchange,提问作者nomnom3214
相关产品推荐
相关产品推荐

