为什么CAST(AS)有时无法使用BigQuery?

时间:2016-09-28 15:19:39

标签: sql google-bigquery google-cloud-platform type-conversion

我尝试了两个问题:

SELECT CASE WHEN CAST(CURRENT_TIMESTAMP() AS DATE) = CURRENT_DATE() THEN 1 ELSE 0 END;

SELECT CASE WHEN DATE(CURRENT_TIMESTAMP()) = CURRENT_DATE() THEN 1 ELSE 0 END;

第一个查询在Legacy SQL中失败但在标准SQL中失败,而第二个查询有效。 (标准SQL目前不在SLA中。)

2 个答案:

答案 0 :(得分:1)

旧版SQL有limited support for DATE。有关详细信息,请参阅Civil time in legacy SQL

因此,如果您需要使用旧版SQL - 在使用DATE()函数的情况下应该使用第二个查询

答案 1 :(得分:1)

Legacy SQL中的第一个查询存在两个问题:

    传统SQL中的
  1. CAST(... AS DATE)仅适用于字符串,而CURRENT_TIMESTAMP返回TIMESTAMP类型

  2. 传统SQL中的CURRENT_DATE误导性地返回STRING,而不是DATE:(

  3. 使用标准SQL

    确实解决了这两个问题