You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery中如何对两列字符串值进行正则比较

实现方法

逐行校验同表两列的子串包含关系,分两种常见场景处理:

场景1:纯文本子串校验(绝大多数业务需求选这个)

如果只是判断ColA的原始字符串是否为ResultCol的连续子串,不需要做正则规则匹配,不建议用REGEXP_CONTAINS,直接用STRPOS函数即可,性能更高,也不需要额外处理正则特殊字符的转义问题,写法:

SELECT *
FROM 你的目标表
-- STRPOS返回子串在目标串中的起始位置,返回值大于0即代表子串存在
WHERE STRPOS(ResultCol, ColA) > 0;

补充判定规则:

  • 该判断默认大小写敏感,需要忽略大小写的话,给两列统一套上大小写转换函数即可:WHERE STRPOS(LOWER(ResultCol), LOWER(ColA)) > 0
  • 如果你的业务规则中空字符串不算有效子串,追加条件AND ColA != ''即可,默认逻辑中空串会被判定为任意字符串的子串。

场景2:需要将ColA作为正则规则匹配ResultCol

如果ColA列存储的内容本身就是正则表达式,需要用这套规则匹配ResultCol的内容,直接把列名作为REGEXP_CONTAINS的第二个参数传入即可,不需要额外做字符串拼接:

SELECT *
FROM 你的目标表
WHERE REGEXP_CONTAINS(ResultCol, ColA);

注意事项:

  • 参数顺序不要写反:第一个参数是待匹配的目标字符串(即ResultCol),第二个参数是正则规则(即ColA),写反会变成判断ResultCol是否为ColA的子串。
  • 如果ColA中存储的是普通文本而非正则,不要用这个写法:正则元字符(比如.、*、+、?、|、()等)会被当成正则语法解析,导致匹配结果不符合预期,这种情况请使用场景1的STRPOS写法。

内容的提问来源于stack exchange,提问作者jokol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:54:11