使用 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 年度数据库”称号
twitter的ID生成器的snowFlake算法的自造golang版