Oracle:与 NULL 连接

Oracle: concatenate with NULL

提问人:Manngo 提问时间:5/26/2023 更新时间:5/26/2023 访问量:62

问:

看来在 Oracle 中,给你,这不是我在其他 DBMS 中的经验。'a'||NULLa

这意味着像这样的表达式将不起作用,因为第一个表达式是 never .coalesce('id: '||id,'missing')NULL

我想我可以使用表达式来完成工作,但这开始过分了。CASE … END

我怎样才能让串联返回,或者我应该使用其他一些简单的技巧?NULL

Oracle null 串联 合并

评论

0赞 Marmite Bomber 5/28/2023
对我来说似乎更一致......'id: '|| nvl(id,'missing')

答:

1赞 Paul W 5/26/2023 #1

Oracle 表现出与 NULL 的混合行为。一方面,有几个功能,如、等。如果单个操作数为 。另一方面,像 、 、 这样的聚合在聚合过程中会方便地忽略 NULL。同样,字符串运算符被视为空字符串。实际上,等效于字符串数据类型。我们经常依靠它来将连接的字符串与可选/有条件的、动态生成的加法组合在一起。您不希望电子邮件正文为空,因为您拼接的邮件正文的某些部分恰好是 NULL。GREATESTLEASTNULLNULLMAXMINSUMAVGNULL''NULL

就 而言,这里有一些选项:coalesce('id: '||id,'missing')

DECODE(id,NULL,'missing','id: '||id) -- works in SQL only, not in PL/SQL

CASE WHEN (id IS NULL) THEN 'missing' ELSE 'id: '||id END

NVL(NULLIF('id: '||id,'id: '),'missing')

评论

0赞 Manngo 5/26/2023
啊,就是这样。 等效于 for strings。我知道它使某些操作更容易,但我真的认为应该允许这样做。谢谢。''NULLNULLNULL
3赞 Wernfried Domscheit 5/26/2023
或者使用(或者相反,我总是弄错了)。NVL2(id, 'id: '||id, 'missing')
0赞 Paul W 5/26/2023
@Wernfried,那就更好了。比 DECODE 少一个参数