【问题标题】:Case Statement Error when using MINUS Snowflake DB使用 MINUS Snowflake DB 时的案例语句错误
【发布时间】:2021-01-11 11:22:18
【问题描述】:

我正在尝试将特定日期更改为另一个日期,以便比较两个查询的哈希值。 为此,我正在使用 CASE 语句。但我不明白为什么会出现以下错误

列 DATE_VALUE 的数据类型为 DATE,我正在对雪花数据库进行操作

inconsistent data type for result columns for set operator input branches, expected DATE, got BOOLEAN for expression [{2}] branch {3}

SQL 语句

SELECT
  COL
, CASE 
    WHEN DATE_VALUE = '2021-01-10'
    THEN DATE_VALUE = CAST('2021-01-11' AS DATE)
END AS DATE_VALUE
,HASH(
CASE 
    WHEN DATE_VALUE = '2021-01-10'::DATE
    THEN DATE_VALUE= '2021-01-11'::DATE 
END 
, COL
, COL
, COL
, COL
, COL
, COL
, COL
)
FROM TABLE1 
MINUS
SELECT
COL
,   DATE_VALUE
,   HASH(
DATE_VALUE
, COL
, COL
, COL
, COL
, COL
, COL
, COL
)
FROM TABLE2;

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    第二列有这个表达式:

    (CASE WHEN DATE_VALUE = '2021-01-10'
          THEN DATE_VALUE = CAST('2021-01-11' AS DATE)
     END) AS DATE_VALUE
    

    THEN 子句是:

    DATE_VALUE = CAST('2021-01-11' AS DATE)
    

    这是一个布尔表达式,而不是日期表达式。你似乎想要:

    (CASE WHEN DATE_VALUE = '2021-01-10'
          THEN CAST('2021-01-11' AS DATE)
     END) AS DATE_VALUE
    

    或者:

    (CASE WHEN DATE_VALUE = '2021-01-10'
          THEN '2021-01-11'::DATE
     END) AS DATE_VALUE
    

    【讨论】:

      【解决方案2】:

      CASE..WHEN 不正确。

      应该是

      CASE 
          WHEN DATE_VALUE = '2021-01-10'
          THEN CAST('2021-01-11' AS DATE) -- DATE_VALUE = CAST('2021-01-11' AS DATE) returns boolean not date
      END AS DATE_VALUE
      

      【讨论】:

      • 对不起,我不能关注你。您是指 THEN 语句后的显式“DATE_VALUE”吗?
      • 您的查询使用THEN DATE_VALUE = CAST('2021-01-11' AS DATE),而我的查询中的答案使用THEN CAST('2021-01-11' AS DATE)。您的查询返回布尔值,我的查询返回日期
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多