看起来在Oracle中,'a'||NULL给予你的是a,这不是我在其他DBMS中的经验。这意味着像coalesce('id: '||id,'missing')这样的表达式将不起作用,因为第一个表达式永远不会是NULL。我想我可以使用CASE … END表达式来完成这项工作,但这已经开始超出了范围。我怎样才能让连接返回NULL,或者我应该使用其他一些简单的技巧?
'a'||NULL
a
coalesce('id: '||id,'missing')
NULL
CASE … END
6mzjoqzu1#
Oracle对NULL表现出混合行为。一方面,有几个函数,如GREATEST,LEAST等。如果单个操作数为NULL,则返回NULL。另一方面,像MAX、MIN、SUM、AVG这样的聚合在聚合过程中会很方便地忽略NULL。类似地,字符串运算符将NULL视为空字符串。实际上,对于字符串数据类型,''等效于NULL。我们经常依赖于此来组装具有可选/条件的串联字符串,动态生成的添加。你不会希望邮件正文是空白的,因为你拼接的邮件正文的某一部分碰巧是NULL。关于coalesce('id: '||id,'missing'),这里有一些选项:
GREATEST
LEAST
MAX
MIN
SUM
AVG
''
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')
1条答案
按热度按时间6mzjoqzu1#
Oracle对NULL表现出混合行为。一方面,有几个函数,如
GREATEST
,LEAST
等。如果单个操作数为NULL
,则返回NULL
。另一方面,像MAX
、MIN
、SUM
、AVG
这样的聚合在聚合过程中会很方便地忽略NULL。类似地,字符串运算符将NULL
视为空字符串。实际上,对于字符串数据类型,''
等效于NULL
。我们经常依赖于此来组装具有可选/条件的串联字符串,动态生成的添加。你不会希望邮件正文是空白的,因为你拼接的邮件正文的某一部分碰巧是NULL。关于
coalesce('id: '||id,'missing')
,这里有一些选项: