Redshift SQL中提取description字段ABC开头字符串的方法咨询
Redshift提取ABC开头字符串实现方案
推荐方案:使用REGEXP_SUBSTR函数
你之前使用regexp_matches未达预期,大概率是因为该函数返回结果为数组类型,需额外取数组下标才能得到字符串值。直接使用REGEXP_SUBSTR函数更适配单匹配结果提取的场景,具体用法如下:
SELECT REGEXP_SUBSTR( description, 'ABC(?:[_A-Za-z0-9]*|(?:\\s?-?\\d+)*)' ) AS extracted_abc_segment FROM your_table_name;
正则规则说明
- 以
ABC作为匹配起始标识 - 两种匹配分支覆盖所有场景:
- 匹配ABC后接字母、数字、下划线的连续字符串(覆盖场景3、场景4)
- 匹配ABC后接空格、可选负号、数字的组合(覆盖场景1、场景2)
可选参数说明
如果需要忽略大小写匹配(比如同时匹配abc、Abc等格式),可以追加参数开启大小写不敏感模式:
SELECT REGEXP_SUBSTR( description, 'ABC(?:[_A-Za-z0-9]*|(?:\\s?-?\\d+)*)', 1, -- 从字符串第1位开始匹配 1, -- 返回第1个匹配结果 'i' -- 忽略大小写 ) AS extracted_abc_segment FROM your_table_name;
若坚持使用regexp_matches的调整方案
只要在返回结果后追加[1]取数组第一个元素即可:
SELECT (regexp_matches(description, 'ABC(?:[_A-Za-z0-9]*|(?:\\s?-?\\d+)*)'))[1] AS extracted_abc_segment FROM your_table_name;
场景匹配验证
上述代码已覆盖所有要求的场景:
- 场景1输入
ABC 3463 XYZ check 1→ 输出ABC 3463 - 场景2输入
gdknkk_name_8ac47ab1418dfddddddd67a1de0c7f6f1b | ABC -4434→ 输出ABC -4434 - 场景3输入
ABC_Training→ 输出ABC_Training - 场景4输入
ABCXXX FTP check 1→ 输出ABCXXX
内容的提问来源于stack exchange,提问作者Priyanka Lad
相关产品推荐
相关产品推荐

