在我的数据集中,创建了一个名为timestamp的列,其数据类型为 String 。
它包含如下值:
2018-05-30T12:56:27:487 + 0200
我想构造一个查询,我可以根据'YYYY-MM-DD'格式的日期从数据集表中提取所有列。
我想在DATE范围之间的where子句中使用它。
你能指导吗?
谢谢。
答案 0 :(得分:2)
将字符串转换为日期
以下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
与{{1 }})。然后,您可以从TIMESTAMP中获取日期
我想在DATE范围之间的where子句中使用它。
因此,现在您可以在WHERE子句中使用
2018-05-29
更新
您可以在下面使用以避免处理“错误”格式
WHERE DATE(PARSE_TIMESTAMP('%FT%H:%M:%E3S%z', ts)) BETWEEN date1 AND date2
如果您需要考虑时区-您可以在下方使用(在应用PARSE_TIMESTAMP之前将PARSE_DATE('%F', SUBSTR(ts, 1, 10))
固定为:
)
.
答案 1 :(得分:0)
如果要表示同一时区中的日期,那么最简单的方法是使用字符串操作并将其转换为日期:
select PARSE_DATE('%Y-%m-%d', SUBSTR('2018-05-30T12:56:27:487+0200', 1, 10))