我试图在snowflake中包含非空值。
我的当前代码:
CONCAT(
CASE WHEN Red='TRUE' THEN 'Red, ' ELSE '' END ||
CASE WHEN Blue='TRUE' THEN 'Blue, ' ELSE '' END ||
CASE WHEN Black='TRUE' THEN 'Black, ' ELSE '' END ||
CASE WHEN White='TRUE' THEN 'White, ' ELSE '' END)
Return:
Red, White, Black,
Black,
...
Want:
Red, White, Black
Black
在mysql中,我会使用concat\u ws,但在snowflake中,如果一个值为null,则返回null:
CONCAT_WS(', ',
CASE WHEN Red='TRUE' THEN 'Red' ELSE NULL END,
CASE WHEN Blue='TRUE' THEN 'Blue' ELSE NULL END,
CASE WHEN Black='TRUE' THEN 'Black' ELSE NULL END,
CASE WHEN White='TRUE' THEN 'White' ELSE NULL END)
3条答案
按热度按时间anauzrmj1#
有点晚了,但我遇到了同样的问题,找到了不同的解决方案:
正如前面正确指出的那样
CONCAT
以及WS_CONCAT
始终返回NULL
当他们的任何争论NULL
.但是,因为雪花有一个
ARRAY
s(即支持半结构化数据),即我们可以执行以下操作:将原始值收集到具有
array_construct
删除NULL
数组中的值array_compact
使用array_to_string
将剩余的数组项串联成字符串以下是使用数组的modifier代码:
编辑:也可以使用
array_construct_compact
,这是array_construct
以及array_compact
vs3odd8k2#
可以使用rtrim删除结尾逗号:
您还可以考虑使用nullif函数将空字符串转换为null:
6yoyoihd3#
我知道你的表达式完全符合你的要求,但你需要去掉后面的逗号。你可以用
TRIM()
为此:请注意,两者都使用是没有意义的
||
以及CONCAT()
:我移除了周围的CONCAT()
.