日期类型(date)和日期时间类型(datetime)在加号运算符中不兼容。

7

最近我在 SQL Server 2008 的开发环境中创建了一个函数,用于将日期和时间拼接在一起,像这样:

select cast('2016-11-09 15:35:00' AS DATE) + CAST('00:00:00' AS DATETIME)

在SQL Server 2008中它运行良好,但在SQL Server 2016中部署时会抛出错误。

日期和日期时间数据类型在加法运算符中不兼容。

但仅当查询单独放置时才能正常工作。

select cast('2016-11-09 15:35:00' AS DATE)
select CAST('00:00:00' AS DATETIME)

所以,我该如何解决这个问题。我发现有些文章说与TIME数据类型不兼容,但我并没有使用它。事实上,我的串联是这样的。
 WHERE 
     CREATIONDATE BETWEEN CAST(@CurrentDate AS DATE) + CAST('00:00:00' AS DATETIME) AND CAST(@CurrentDate AS DATE) + CAST('23:59:59' AS DATETIME)

这段代码中,@CurrentDate 是一个 DateTime 变量,作为 '2016-11-09 15:35:00' 传递给我的函数。

我无法修改 SQL Server 2016 箱的配置。我该如何修复我的代码?

谢谢。


1
只需将其转换为日期,然后再转换为日期时间。 select cast(cast('2016-11-09 15:35:00' as date) as datetime) 然后使用dateadd select dateadd(dd,1,cast(cast('2016-11-09 15:35:00' as date) as datetime))。我不是between运算符的忠实粉丝,所以当我处理日期时间时,我倾向于使用> startDate和< endDate,其中endDate是第二天,即11/10,这就像是<= 11/09 23:59:59。 - S3S
谢谢你。你救了我们的一天。请将其发布为答案。 - Maximus Decimus
很高兴能帮助Maximus。 - S3S
我不理解这个问题,你在比较不同的事物。第一个SQL是错误的,因为有 +。在第二个SQL中,你没有把它们加在一起,无论 + 存在什么问题,在这个SQL中显然都不存在。你在这里问的问题是什么?基本上SQL Server告诉你不能将日期(DATE)和日期时间(DATETIME)相加(+)。那么你要如何修复它呢?修复什么? - Lasse V. Karlsen
1个回答

4
只需将其转换为日期,然后再转换为日期时间即可。 select cast(cast('2016-11-09 15:35:00' as date) as datetime) 要再加1天,请使用: select dateadd(dd,1,cast(cast('2016-11-09 15:35:00' as date) as datetime)) 当处理日期时间时,我不太喜欢使用between运算符,而是使用> startDate和 < endDate的方式,其中endDate是下一天,例如11/10,即表示<=11/09 23:59:59。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接