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

Google BigQuery中如何用单正则匹配表名里02-23的小时?

解决方案:BigQuery筛选表名包含02-23小时的表

针对你的需求,有两种可靠的实现方式,分别适用于不同场景:

方法1:单正则匹配(支持任意位置的小时串)

用负向零宽断言可以在单正则里直接排除00、01,同时覆盖02-23的所有情况。正则表达式为:(?!0[01])[0-2][0-9]

正则说明

  • (?!0[01]):负向前瞻断言,确保接下来的两位字符不是00或01
  • [0-2][0-9]:匹配所有两位数字的小时格式(00-29),结合前面的断言,最终只保留02-23

BigQuery查询示例

SELECT table_name
FROM `your-project.your-dataset.INFORMATION_SCHEMA.TABLES`
WHERE REGEXP_CONTAINS(table_name, r'(?!0[01])[0-2][0-9]')

如果需要提取出匹配的小时部分,用REGEX_EXTRACT:

SELECT 
  table_name,
  REGEX_EXTRACT(table_name, r'(?!0[01])[0-2][0-9]') AS hour
FROM `your-project.your-dataset.INFORMATION_SCHEMA.TABLES`
WHERE REGEX_EXTRACT(table_name, r'(?!0[01])[0-2][0-9]') IS NOT NULL

方法2:数值范围判断(更直观易维护)

如果小时在表名中的位置固定(比如是第3-4位),可以提取后转成数值再筛选,这种方法比正则更易懂,不容易出错。

BigQuery查询示例

SELECT table_name
FROM `your-project.your-dataset.INFORMATION_SCHEMA.TABLES`
-- 替换SUBSTR的参数为实际小时在表名中的起始位置和长度(这里假设是第3位开始的2个字符)
WHERE SAFE_CAST(SUBSTR(table_name, 3, 2) AS INT64) BETWEEN 2 AND 23

说明

  • SAFE_CAST:避免因表名中提取的不是数字而报错,转换失败会返回NULL,自动被WHERE过滤
  • BETWEEN 2 AND 23:直接匹配02(转成2)到23的所有小时数值

场景选择

  • 如果小时在表名中的位置不固定,或者和其他数字混合,优先用正则方法
  • 如果小时位置固定,优先用数值判断方法,可读性和维护性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:50:17