【问题标题】:SQL Server 2016 Convert function with null date type is different from SQL Server 2008 R2具有空日期类型的 SQL Server 2016 转换函数与 SQL Server 2008 R2 不同
【发布时间】:2019-11-07 02:45:08
【问题描述】:

我遇到了关于 SQL Server 内置函数 CONVERT 的问题。

从 SQL Server 2008 R2 迁移到 2016 后,发现这次迁移有一个不同之处。

我已经查看了最新 MS Doc 中的CONVERT 函数,当提供的数据类型参数为 null 时,它将返回 null。我想知道为什么 SQL Server 2008 R2 运行良好....

在 SQL Server 2008 R2 中:

SELECT CONVERT (DATE, GETDATE(), NULL) 

返回一个日期值。

在 SQL Server 2016 中:

SELECT CONVERT (DATE, GETDATE(), NULL) 

返回NULL

PS:返回NULL 是正确的行为,但我想知道为什么早期版本返回日期值。

【问题讨论】:

  • FWIW,这种行为一直是一个错误,现在已经修复。在 SQL Server 2005 联机丛书中,已经记录了如果第三个参数是 NULL,则结果应该是 NULL -- 引擎实际上从未这样做过。

标签: sql-server sql-server-2008-r2 sql-server-2016


【解决方案1】:

此重大更改的遗留行为可以由数据库兼容性级别控制。兼容级别 100 (SQL Server 2008) 将返回非空值。

至于为什么,似乎 Microsoft 确定 NULL 是正确的值以返回 NULL 样式并相应地更改了行为。较旧的数据库兼容性级别提供了一种避免破坏代码的方法,直到它可以被修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多