将字符串转换为日期
以下 BigQuery 标准 SQL 示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT '2018-05-30T12:56:27.487+0200' ts UNION ALL
SELECT '2018-05-30T01:56:27.487+0200'
)
SELECT ts AS ts_as_string,
PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts) ts_as_timestamp,
DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts)) ts_as_date
FROM `project.dataset.table`
结果
ts_as_string ts_as_timestamp ts_as_date
2018-05-30T12:56:27.487+0200 2018-05-30 10:56:27.487 UTC 2018-05-30
2018-05-30T01:56:27.487+0200 2018-05-29 23:56:27.487 UTC 2018-05-29
如您所见 - 首先我从字符串中解析时间戳 - 这是重要的部分 - 这是您可以考虑时区的地方(请参阅结果中的日期差异 2018-05-29 与 2018-05-29)。然后你可以从 TIMESTAMP 中获取 Date
我想在 DATE Range 之间的 where 子句中使用它。
所以,现在您可以在 WHERE 子句中使用 below
WHERE DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts)) BETWEEN date1 AND date2
更新
您可以使用下面来避免处理“错误”格式
PARSE_DATE('%F', SUBSTR(ts, 1, 10))
如果您需要考虑时区 - 您可以在下面使用(在应用 PARSE_TIMESTAMP 之前将 : 修复为 .)
DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', FORMAT('%s.%s', SUBSTR(ts, 1, 19), SUBSTR(ts, 21, 8))))