Teradata中使用REGEXP_SUBSTR提取指定位置字符的技术求助
提取Teradata指定格式字符串中第3个斜杠后的前两位字符
没问题,这就给你搞定Teradata里用REGEXP_SUBSTR提取目标字符的需求!
假设你的目标列名为target_column,表名为your_table,直接用下面的SQL语句就能实现:
SELECT REGEXP_SUBSTR(target_column, '^(?:[^/]+/){3}([^/]{2})', 1, 1, 'i', 1) AS extracted_two_chars FROM your_table;
正则表达式拆解说明
^(?:[^/]+/){3}:这是一个非捕获组,专门用来定位到第3个斜杠的位置:[^/]+:匹配任意非斜杠的字符(也就是每个斜杠分隔的段内容)(?:...):非捕获组,只做匹配不保存结果,避免干扰我们要提取的目标{3}:重复这个组3次,刚好覆盖前三个XXX/、XXXX/、XXXX/的部分,精准停在第3个斜杠的末尾
([^/]{2}):这是我们要的捕获组,匹配第3个斜杠之后的前2个非斜杠字符——也就是你需要的XY- 最后一个参数
1:Teradata的REGEXP_SUBSTR支持指定返回第几个捕获组的内容,这里指定返回第1个捕获组的结果
示例验证
如果你的列值是ABC/DEFG/HIJK/XYYUX/LMN,执行上面的语句会直接返回XY,完全符合你的需求。
容错处理(可选)
如果存在格式不规范的行(比如不足3个斜杠),函数会返回NULL,可以用COALESCE给这类情况设置默认值:
SELECT COALESCE(REGEXP_SUBSTR(target_column, '^(?:[^/]+/){3}([^/]{2})', 1, 1, 'i', 1), '格式异常') AS extracted_two_chars FROM your_table;
内容的提问来源于stack exchange,提问作者Jude92
相关产品推荐
相关产品推荐

