如何使用标准SQL将Google Bigquery中的datetime转换为日期,或者如何从datetime提取where语句中的年份?
目前,我有一个datetime字段,需要根据该字段筛选我的WHERE语句,特别是2019年和2020年。如果我只有一个没有时间的日期字段,我知道我可以使用:如何使用标准SQL将Google Bigquery中的datetime转换为日期,或者如何从datetime提取where语句中的年份?,sql,datetime,google-bigquery,datetime-format,Sql,Datetime,Google Bigquery,Datetime Format,目前,我有一个datetime字段,需要根据该字段筛选我的WHERE语句,特别是2019年和2020年。如果我只有一个没有时间的日期字段,我知道我可以使用: WHERE extract(year from cast([field name] as date))> 2018 例如提取年份 因此,我需要两件事中的一件: 我需要将datetime字段转换为日期,以便使用上面的提取sql,或者 我需要一个涉及datetime字段的WHERE语句,它只允许我查看大于2018年的数据 为了将d
WHERE extract(year from cast([field name] as date))> 2018
例如提取年份
因此,我需要两件事中的一件:
我建议不要在被筛选的列上应用日期函数,因为这会给数据库带来更多的工作(列中的每个值都必须在比较之前进行转换),并防止数据库利用现有索引 相反,您可以将
datetime
列与literal进行比较,如下所示:
where mydatetimecol >= datetime(2019, 1, 1, 0, 0, 0)
如果您有未来的日期,则可以使用半开放时间间隔进行检查:
where
mydatetimecol >= datetime(2019, 1, 1, 0, 0, 0)
and mydatetimecol < datetime(2021, 1, 1, 0, 0, 0)
为什么不用这个
WHERE col >= datetime('2019-01-01')
或:
其中col>=datetime('2019-01-01')和col
如果将值存储为字符串,那么您很幸运,因为您可以使用字符串比较:
WHERE col >= '2019-01-01' and col < '2021-01-01'
其中col>='2019-01-01'和col<'2021-01-01'
但是,我建议您使用正确的数据类型加载数据。由于某种原因,当我输入该数据时,我收到错误“运算符无匹配签名>=参数类型:STRING,DATETIME。支持的签名:ANY>=ANY”@Jake:DATETIME列的数据类型是什么?它是一个字符串,但不可更改,因为它是第三方数据source@Jake:ok-您的问题中没有那么清楚-请参阅我的更新答案。很遗憾,收到相同的错误消息“对于参数类型:STRING、DATETIME,运算符>没有匹配的签名。支持的签名:ANY>ANY”
WHERE col >= datetime('2019-01-01') and col < datetime('2021-01-01')
WHERE col >= '2019-01-01' and col < '2021-01-01'