BigQuery将字串转换为日期

时间:2019-04-19 14:11:36

标签: sql google-bigquery

在我的数据集中,创建了一个名为timestamp的列,其数据类型为 String

它包含如下值:

2018-05-30T12:56:27:487 + 0200

我想构造一个查询,我可以根据'YYYY-MM-DD'格式的日期从数据集表中提取所有列。

我想在DATE范围之间的where子句中使用它。

你能指导吗?

谢谢。

2 个答案:

答案 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))