Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 大查询是否和日期错误_Sql_Google Cloud Platform_Google Bigquery - Fatal编程技术网

Sql 大查询是否和日期错误

Sql 大查询是否和日期错误,sql,google-cloud-platform,google-bigquery,Sql,Google Cloud Platform,Google Bigquery,我正在创建一个if函数来检查字符串日期是否与当前年份匹配。我的下一步是做一个datesub或者只是显示常规日期 在BQ中尝试此IF函数时,我遇到以下错误 查询字符串中出错:如果参数类型为BOOL、DATE、BOOL,则函数没有匹配的签名。支持的签名:如果(BOOL,ANY,ANY)在[3:1] 以下方法确实有效: IF(FORMAT_DATETIME("%Y",CURRENT_DATETIME())= SUBSTR(date, 0, 4), TRUE, FALSE) 如何在BQ(标准s

我正在创建一个if函数来检查字符串日期是否与当前年份匹配。我的下一步是做一个datesub或者只是显示常规日期

在BQ中尝试此IF函数时,我遇到以下错误

查询字符串中出错:如果参数类型为BOOL、DATE、BOOL,则函数没有匹配的签名。支持的签名:如果(BOOL,ANY,ANY)在[3:1]

以下方法确实有效:

 IF(FORMAT_DATETIME("%Y",CURRENT_DATETIME())= SUBSTR(date, 0, 4),
 TRUE, 
 FALSE)
如何在BQ(标准sql)中实现这一点

文件上说了这句话,我不明白,在谷歌上也找不到明确的答案

true_result和else_result必须可强制为公共超类型


谢谢

我想你只需要
箱子

(CASE WHEN FORMAT_DATETIME('%Y', CURRENT_DATETIME()) =
           SUBSTR(date, 0, 4), 
      THEN DATE(cast(SUBSTR(date, 0, 4) AS INT64), cast(SUBSTR(date, 4, 2) AS INT64),cast(SUBSTR(date, 6, 2) AS INT64))
 END) 
我想你可以简化一下。例如:

(CASE WHEN FORMAT_DATETIME('%Y', CURRENT_DATETIME()) = SUBSTR(date, 1, 4), 
      THEN PARSE_DATE('%Y%m%d', date) 
 END) 

我想你只需要
案例

(CASE WHEN FORMAT_DATETIME('%Y', CURRENT_DATETIME()) =
           SUBSTR(date, 0, 4), 
      THEN DATE(cast(SUBSTR(date, 0, 4) AS INT64), cast(SUBSTR(date, 4, 2) AS INT64),cast(SUBSTR(date, 6, 2) AS INT64))
 END) 
我想你可以简化一下。例如:

(CASE WHEN FORMAT_DATETIME('%Y', CURRENT_DATETIME()) = SUBSTR(date, 1, 4), 
      THEN PARSE_DATE('%Y%m%d', date) 
 END) 

我认为谷歌SQL拒绝混合日期和布尔类型的返回值

在您的示例中,IF(BOOL,ANY,ANY)的第三个参数等于FALSE 但它必须是DATE类型或为NULL

IF(FORMAT_DATETIME("%Y",CURRENT_DATETIME())= SUBSTR(date, 0, 4)
  ,DATE(cast(SUBSTR(date, 0, 4) AS INT64)
       ,cast(SUBSTR(date, 4, 2) AS INT64)
       ,cast(SUBSTR(date, 6, 2) AS INT64)
       )
  ,NULL
  )

我认为谷歌SQL拒绝混合日期和布尔类型的返回值

在您的示例中,IF(BOOL,ANY,ANY)的第三个参数等于FALSE 但它必须是DATE类型或为NULL

IF(FORMAT_DATETIME("%Y",CURRENT_DATETIME())= SUBSTR(date, 0, 4)
  ,DATE(cast(SUBSTR(date, 0, 4) AS INT64)
       ,cast(SUBSTR(date, 4, 2) AS INT64)
       ,cast(SUBSTR(date, 6, 2) AS INT64)
       )
  ,NULL
  )

可能有更简单的方法来做你想做的事情。示例数据和期望的结果很有帮助。可能有更简单的方法来做您想要的事情。样本数据和期望的结果都很有用。这就是它,谢谢!当你事后考虑它时,你会觉得这很合乎逻辑,但这可能会让它在文档中更加真实。是的,由于互联网,文档与以前不同:-)但是你的问题存在于其他SQL函数,如NVL()或COALESCE(),其中所有非空类型都必须相等。就是这样,谢谢!当你事后考虑它时,你会觉得这很合乎逻辑,但这可能会让它在文档中更加真实。是的,由于互联网,文档与以前不同:-)但是你的问题存在于其他SQL函数,如NVL()或COALESCE(),其中所有非空类型都必须相等。