使用 MINUS Snowflake DB 时的案例语句错误

Posted

技术标签:

【中文标题】使用 MINUS Snowflake DB 时的案例语句错误【英文标题】:Case Statement Error when using 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;

【问题讨论】:

【参考方案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)。您的查询返回布尔值,我的查询返回日期

以上是关于使用 MINUS Snowflake DB 时的案例语句错误的主要内容,如果未能解决你的问题,请参考以下文章

需要将数据从我的 PC 上的 MySQL DB 带到 Snowflake

Snowflake 摘得DB-Engines“2021 年度数据库”称号

Flyway 无法使用 Snowflake JDBC

twitter的ID生成器的snowFlake算法的自造golang版

Snowflake DB UDF 可以执行 SQL 命令吗?

在Snowflake-db中使用Sha vs md5或Hash