如何在Snowflake中提取第三个'+'符号后的3个字符?
问题分析与修正
原表达式的错误点
+是正则特殊元字符,直接写+会被解释为“匹配前面元素一次或多次”,而非字面意义的+符号,必须用\+转义。- 正则里的
\)属于多余内容,你的需求是提取+后的字符,不需要匹配右括号。 - 最后一个参数
1表示提取第一个捕获组,但原正则没有定义捕获组,这会导致返回null;同时'e'扩展模式在这里没必要使用。
正确的表达式写法
假设你使用的是Oracle的REGEXP_SUBSTR,可以这样写:
REGEXP_SUBSTR(OBJECT1, '\+.{3}', 1, 3, NULL, 0)
或者更精准匹配非+的字符(避免后续+干扰):
REGEXP_SUBSTR(OBJECT1, '\+([^+]{3})', 1, 3, NULL, 1)
说明
\+:匹配字面意义的+符号.{3}:匹配任意3个字符(如果要限定是字母数字,可换成\w{3})[^+]{3}:匹配3个非+的字符,避免后续+被包含进来- 最后一个参数
1表示提取第一个捕获组的内容(对应括号里的部分),0则返回整个匹配的字符串(包括前面的+)
内容的提问来源于stack exchange,提问作者IttookJohnLee
相关产品推荐
相关产品推荐

