Oracle:与NULL连接

fxnxkyjh  于 2023-05-28  发布在  Oracle
关注(0)|答案(1)|浏览(286)

看起来在Oracle中,'a'||NULL给予你的是a,这不是我在其他DBMS中的经验。
这意味着像coalesce('id: '||id,'missing')这样的表达式将不起作用,因为第一个表达式永远不会是NULL
我想我可以使用CASE … END表达式来完成这项工作,但这已经开始超出了范围。
我怎样才能让连接返回NULL,或者我应该使用其他一些简单的技巧?

6mzjoqzu

6mzjoqzu1#

Oracle对NULL表现出混合行为。一方面,有几个函数,如GREATESTLEAST等。如果单个操作数为NULL,则返回NULL。另一方面,像MAXMINSUMAVG这样的聚合在聚合过程中会很方便地忽略NULL。类似地,字符串运算符将NULL视为空字符串。实际上,对于字符串数据类型,''等效于NULL。我们经常依赖于此来组装具有可选/条件的串联字符串,动态生成的添加。你不会希望邮件正文是空白的,因为你拼接的邮件正文的某一部分碰巧是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')

相关问题