代码之家  ›  专栏  ›  技术社区  ›  Wei Lin

合并(null,“”)在oracle中获取null,在SQL Server中获取“”?

  •  3
  • Wei Lin  · 技术社区  · 7 年前
    • SQL Server版本:2012

    我的代码:

    select COALESCE (null, '') 
    from dual
    

    在Oracle中返回 null

    select COALESCE (null, '')
    

    '' 结果。

    为什么这个结果不同?

    4 回复  |  直到 6 年前
        1
  •  7
  •   D-Shih    7 年前

    在Oracle文档中关于 NULL

    Oracle数据库将长度为零的字符值视为null。

    Oracle内部将空字符串更改为 NULL

    select null from dual
    

    与…一样

    select '' from dual
    

    他们都回来了 无效的 .

    select COALESCE (null,'') from dual select COALESCE (null,null) from dual 在甲骨文里。

    sqlfiddle

    这里有一个关于这个的链接。

    Why does Oracle 9i treat an empty string as NULL?

        2
  •  3
  •   Dale K    6 年前

    NULL 当处理可变长度字符类型时(例如。 VARCHAR VARCHAR2 ). 但是,当一个零长度的字符串被分配给一个固定长度的字符类型(例如。 CHAR )结果是该字段是空白的,填充到定义的完整长度,这是 烧焦 数据类型。 See this AskTom question

        3
  •  2
  •   Dale K    6 年前

    您是否在Oracle和SQL Server中尝试过以下代码:

    select COALESCE (null,' ') from dual
    select COALESCE (null,' ')
    

    它回来了 not null 导致Oracle和SQL Server

    主要问题是Oracle和sqlserver如何处理第二个表达式 '' . 在甲骨文中,它被视为 NULL 但SQLServer将其视为一个空白空间。

        4
  •  2
  •   Dale K    6 年前

    根据 Oracle docs

    这不是ANSI标准。