如何使用标准SQL将Google Bigquery中的datetime转换为日期,或者如何从datetime提取where语句中的年份?

如何使用标准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

目前,我有一个datetime字段,需要根据该字段筛选我的WHERE语句,特别是2019年和2020年。如果我只有一个没有时间的日期字段,我知道我可以使用:

WHERE extract(year from cast([field name] as date))> 2018 
例如提取年份

因此,我需要两件事中的一件:

  • 我需要将datetime字段转换为日期,以便使用上面的提取sql,或者

  • 我需要一个涉及datetime字段的WHERE语句,它只允许我查看大于2018年的数据

  • 为了将datetime转换为date,除了大多数BigQueryGuide在线解决方案之外,我还尝试了convert和left函数,但遗憾的是,这些解决方案对我不起作用

    以下是当前日期时间格式的示例:“2018-08-22 02:48:56”

    提前感谢您的帮助


    我建议不要在被筛选的列上应用日期函数,因为这会给数据库带来更多的工作(列中的每个值都必须在比较之前进行转换),并防止数据库利用现有索引

    相反,您可以将
    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'