Coalesce(null,'') 在 Oracle 中获取 null 并在 SQL Server 中获取 ''?
Posted
技术标签:
【中文标题】Coalesce(null,\'\') 在 Oracle 中获取 null 并在 SQL Server 中获取 \'\'?【英文标题】:Coalesce(null,'') gets null in Oracle and gets '' in SQL Server?Coalesce(null,'') 在 Oracle 中获取 null 并在 SQL Server 中获取 ''? 【发布时间】:2018-11-12 02:39:34 【问题描述】: Oracle 版本:12.1.0.2.0 SQL Server 版本:2012我的代码:
select COALESCE (null, '')
from dual
在 Oracle 中返回 null
结果,但是
select COALESCE (null, '')
在 SQL Server 中返回 ''
结果。
为什么这个结果不同?
都是ANSI标准,不应该一样吗?
【问题讨论】:
【参考方案1】:在关于NULL的Oracle文档中
Oracle 数据库将长度为零的字符值视为空值。
Oracle 在内部将空字符串更改为 NULL
值。 Oracle 根本不允许插入空字符串。
select null from dual
同
select '' from dual
都是返回NULL
。
因此,当您使用 select COALESCE (null,'') from dual
时,它将在 Oracle 中转换为 select COALESCE (null,null) from dual
。
sqlfiddle
这是一个讨论这个的链接。
Why does Oracle 9i treat an empty string as NULL?
【讨论】:
【参考方案2】:在处理可变长度字符类型(例如VARCHAR
或VARCHAR2
)时,将零长度字符串分配给字段会导致NULL
。但是,当将零长度字符串分配给固定长度字符类型(例如 CHAR
)时,结果是该字段被空白填充到完全定义的长度,这是 CHAR
数据类型所要求的。 See this AskTom question 了解更多信息。
【讨论】:
【参考方案3】:您是否在 Oracle 和 SQL Server 中尝试过以下代码:
select COALESCE (null,' ') from dual
select COALESCE (null,' ')
它在 Oracle 和 SQL Server 中都返回 not null
结果
主要问题是 Oracle 和 SQL Server 如何处理第二个表达式''
。在 Oracle 中,它被视为NULL
,但 SQL Server 将其视为一个空白空间。
【讨论】:
确切地说,我不会称之为parameter
..Expression
【参考方案4】:
根据Oracle docs:
Oracle 数据库将长度为零的字符值视为空值。
这不是 ANSI 标准。
【讨论】:
以上是关于Coalesce(null,'') 在 Oracle 中获取 null 并在 SQL Server 中获取 ''?的主要内容,如果未能解决你的问题,请参考以下文章
在 PostgreSQL 中使用 COALESCE 处理 NULL 值
处理空值,把 Null 值转换为实际值(coalesce,nvl 函数用法)