SQL2016中的dateadd操作冲突,但不是2012

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL2016中的dateadd操作冲突,但不是2012相关的知识,希望对你有一定的参考价值。

我发现在SQL Server 2012和SQL Server 2016中添加datedatetime类型的行为有所不同。对于查询:

select convert(date,getdate())+getdate()

我在SQL 2016中遇到错误:

数据类型date和datetime在add运算符中不兼容。

在2012年它没有返回错误,只返回核心日期总和。这种行为的原因是什么?

答案

在SQL Server 2012中,操作员(默默地?)更改为禁止添加或减少不匹配的类型。它显然与SQL Server 2008分别存储日期和时间的能力有关。您需要转换为常见类型(例如,转换为日期,然后转换为日期时间)。

对我来说似乎是一个非常大的突破性变化,但显然微软觉得这是必要的。

以上是关于SQL2016中的dateadd操作冲突,但不是2012的主要内容,如果未能解决你的问题,请参考以下文章

将列作为参数传递给 SQL Server 中的 dateadd

将 select 和 dateadd 函数中的结果集插入到同一个表中

Excel SQL 查询中的 DateAdd 函数不起作用

oracle dateadd函数

SQL语句中的日期计算

SQL SERVER 如何判断是不是年,月最后一天