coalesce(null,'')在oracle中为null,在SQL Server中为''?

时间:2018-11-12 02:39:34

标签: sql sql-server oracle

  • Oracle版本:12.1.0.2.0
  • SQL Server版本:2012

我的代码:

myDIV
Oracle中的

返回select COALESCE (null, '') from dual 结果,但是

null

SQL Server中的

返回一个select COALESCE (null, '') 结果。

为什么这个结果不同?

它们是ANSI标准,不是吗?

4 个答案:

答案 0 :(得分:7)

在有关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?

答案 1 :(得分:3)

在处理长度可变的字符类型(例如VARCHAR或VARCHAR2)时,将零长度的字符串分配给字段会导致NULL。但是,当将零长度的字符串分配给固定长度的字符类型(例如CHAR)时,结果是该字段被空白填充为CHAR数据类型所需的完整定义的长度。 See this AskTom question了解更多信息。

好运。

答案 2 :(得分:2)

您是否尝试过在oracle和sql server中使用以下代码

var form = document.getElementById("redirect");
form.onsubmit = function() {
    var location = document.getElementById("location").value;
    var goto = document.getElementById("goto").value;
    if (location == "Bus") {
        if (goto == "Home") {
            window.location.href = "https://google.com";
        }
        else {
            window.location.href = "https://facebook";
        }
    } else {
        if (goto == "Home") {
            window.location = "a url";
        } 
        else {
            window.location.href = "another url";
        }
    }
}     

它返回不为null的结果oracle和sql server都

主要问题是oracle和SQL Server如何处理第二个表达式select COALESCE (null,' ') from dual select COALESCE (null,' ') 。在Oracle中,将其视为NULL,但SQL Server将其视为空白空间。

答案 3 :(得分:2)

根据Oracle文档“ Oracle数据库将长度为零的字符值视为空值。”

参考:https://docs.oracle.com/database/121/SQLRF/sql_elements005.htm#SQLRF30037

不是ANSI标准。