首页 > 解决方案 > 不能在雪花中工作 - “IFF”声明

问题描述

我正在尝试在雪花视图中实现以下语句

IFF("Closed" = TRUE,DATEDIFF(DAY,TO_DATE("ActualFinishDate"),current_date()),FALSE) - 得到真/假

如果我给出 IFF("Closed" = TRUE,'1234',FALSE) 它将不起作用 - 这有效并且我根据关闭的值得到 1234 或 False

有人可以帮我为什么 DATEDIFF(DAY,TO_DATE("ActualFinishDate"),current_date()) 在 IFF 中没有给出结果我测试了如果我单独执行该语句是正确的和正确的值。

标签: viewsnowflake-cloud-data-platformsnowflake-sql

解决方案


都是关于数据类型的

案子

在 CASE 的第二种形式中,每个值都是 expr 的潜在匹配项。该值可以是文字或表达式。该值必须与 expr 的数据类型相同,或者必须是可以强制转换为 expr 的数据类型的数据类型。

区别如下:

DATEDIFF returns INTEGER, BOOLEAN
vs
'1234'   string literal,  BOOLEAN

对于 Booelan,它的工作原理如下:

TO_BOOLEAN :

For a text expression, string must be:

        'true', 't', 'yes', 'y', 'on', '1' return TRUE.

        'false', 'f', 'no', 'n', 'off', '0' return FALSE.

        All other strings return an error.

Strings are case-insensitive.

For a numeric expression:

        0 returns FALSE.

        All non-zero values return TRUE.

编辑:

为了返回字符串而不是布尔显式转换,可以使用:

IFF("Closed" = TRUE,TO_VARCHAR(DATEDIFF(DAY,TO_DATE("ActualFinishDate"),current_date())),FALSE)

-- "Closed" column is probably boolean so there is no need to ` = TRUE`:
IFF("Closed",TO_VARCHAR(DATEDIFF(DAY,TO_DATE("ActualFinishDate"),current_date())),FALSE)

推荐阅读