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

如何查询BigQuery中int64类型timestamp字段的日期范围?

正确的BigQuery日期范围查询方式

首先得解决你遇到的核心问题:类型不匹配,以及时间单位可能没对应上。咱们一步步来:

为什么之前的查询出错?

你直接拿int64类型的时间字段和字符串格式的日期比较,BigQuery不会自动帮你做类型转换,所以才会抛出Argument type mismatch的错误。而用Unix值查询返回全量数据,大概率是你用的Unix时间单位和字段存储的不一致(比如字段存的是微秒,你用了秒级的Unix值,数值差了百万倍,自然所有数据都满足条件)。

正确的查询方法

首先得确定你的int64字段存储的是哪种时间戳:从描述里的显示格式带微秒来看,很大概率是微秒级的Unix时间戳(从1970-01-01 00:00:00 UTC开始的微秒数)。对应的解决方法有两种:

方法1:把int64字段转成TIMESTAMP类型,再和日期字符串转的TIMESTAMP比较

这种方式可读性更强,适合日常查询:

SELECT *
FROM `your_project.your_dataset.your_table`
WHERE TIMESTAMP_MICROS(your_timestamp_int64) > TIMESTAMP('2018-01-01 00:00:00')

如果你的字段是毫秒级时间戳,就把TIMESTAMP_MICROS换成TIMESTAMP_MILLIS;秒级的话用TIMESTAMP_SECONDS。

方法2:把目标日期转成对应单位的int64,直接做数值比较

这种方式性能略优(少一次类型转换),适合大数据量查询:

SELECT *
FROM `your_project.your_dataset.your_table`
WHERE your_timestamp_int64 > UNIX_MICROS(TIMESTAMP('2018-01-01 00:00:00'))

同样,根据时间单位替换UNIX_MICROS为UNIX_MILLIS或UNIX_SECONDS。

验证时间单位是否正确

不确定字段存的是哪种单位?先跑个小查询验证:

SELECT 
  your_timestamp_int64,
  TIMESTAMP_MICROS(your_timestamp_int64) AS micros_converted,
  TIMESTAMP_MILLIS(your_timestamp_int64) AS millis_converted,
  TIMESTAMP_SECONDS(your_timestamp_int64) AS seconds_converted
FROM `your_project.your_dataset.your_table`
LIMIT 5

看哪个转换后的时间和你看到的2017-11-13T02:40:57.948000一致,就用对应的函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:28:15