SQL Server 2016 日期类型为空的转换函数不同于 SQL Server 2008 R2
SQL Server 2016 Convert function with null date type is different from SQL Server 2008 R2
我遇到了有关 SQL 服务器内置函数 CONVERT
的问题。
从 SQL Server 2008 R2 迁移到 2016 后,在这次迁移中发现一处差异。
我已经通过最新的 MS Doc 中的 CONVERT
函数,当提供的数据类型参数为 null 时,它将 return null。我想知道为什么 SQL Server 2008 R2 工作正常....
在 SQL Server 2008 R2 中:
SELECT CONVERT (DATE, GETDATE(), NULL)
return一个日期值。
在 SQL 服务器 2016 中:
SELECT CONVERT (DATE, GETDATE(), NULL)
returns NULL
.
PS:returning NULL
是正确的行为,但我想知道为什么早期版本 returned 一个日期值。
此重大更改的遗留行为可由数据库兼容级别控制。兼容级别 100(SQL Server 2008)将 return 一个非空值。
至于为什么,Microsoft 似乎确定 NULL
是具有 NULL
样式的 return 的正确值,并相应地更改了行为。较旧的数据库兼容性级别提供了一种避免破坏代码的方法,直到它可以被修复。
我遇到了有关 SQL 服务器内置函数 CONVERT
的问题。
从 SQL Server 2008 R2 迁移到 2016 后,在这次迁移中发现一处差异。
我已经通过最新的 MS Doc 中的 CONVERT
函数,当提供的数据类型参数为 null 时,它将 return null。我想知道为什么 SQL Server 2008 R2 工作正常....
在 SQL Server 2008 R2 中:
SELECT CONVERT (DATE, GETDATE(), NULL)
return一个日期值。
在 SQL 服务器 2016 中:
SELECT CONVERT (DATE, GETDATE(), NULL)
returns NULL
.
PS:returning NULL
是正确的行为,但我想知道为什么早期版本 returned 一个日期值。
此重大更改的遗留行为可由数据库兼容级别控制。兼容级别 100(SQL Server 2008)将 return 一个非空值。
至于为什么,Microsoft 似乎确定 NULL
是具有 NULL
样式的 return 的正确值,并相应地更改了行为。较旧的数据库兼容性级别提供了一种避免破坏代码的方法,直到它可以被修复。