我在数据集中有一个具有以下模式的表:
date TIMESTAMP
id INTEGER
...
表在日期列上分区。
在BQ UI中显示表格的预览显示该表格在2月有很多行:
date, id, ...
2019-02-19 16:18:00 UTC, 534480012, ...
2019-02-19 16:23:00 UTC, 534423879, ...
但是,此查询返回零结果:
SELECT id FROM `<project>.<dataset>.<table>`
WHERE
TIMESTAMP_SUB(date, INTERVAL 60*24 HOUR) <= `date` AND
TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`
(是的,在撰写本文时,应显示2月的行。)
甚至,即使是“默认”查询也返回零结果:
SELECT id FROM `<project>.<dataset>.<table>` WHERE date = TIMESTAMP("2019-02-19") LIMIT 1000
在两种情况下均无错误。只是空的结果。我在做什么错了?
答案 0 :(得分:3)
这怎么可能是真的?
TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`
如果您减去24小时,则它将小于date
,而不是大于date
。
对于第二个查询,您根本没有完全在午夜的时间戳。大概您打算这样做:
WHERE DATE(date) = DATE('2019-02-19')
我强烈建议您更改列的名称。在SQL关键字后命名列是一个坏主意。在确实是时间戳的情况下称其为“日期”会产生误导和混乱。