【发布时间】:2017-03-23 17:18:30
【问题描述】:
我最近在 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 中部署它会引发错误
add 运算符中的数据类型 date 和 datetime 不兼容。
但只有在单独放置查询时才能正常工作
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 框的配置。如何修复我的代码?
谢谢
【问题讨论】:
-
只需将其转换为日期,然后再转换为日期时间。
select cast(cast('2016-11-09 15:35:00' as date) as datetime)然后使用 dateaddselect dateadd(dd,1,cast(cast('2016-11-09 15:35:00' as date) as datetime))。我不是 between 运算符的忠实粉丝,所以当我处理日期时间时,我倾向于使用 > startDate 和 -
谢谢。你拯救了这一天。请发布它作为答案。
-
很高兴帮助马克西姆斯
-
我不明白这个问题,你在比较苹果和橘子。由于
+,第一个SQL 是错误的。在第二个 SQL 中,您没有将它们加在一起,+存在的任何问题显然甚至不存在于该 SQL 中。你在这里有什么问题?基本上,SQL Server 告诉您不能添加 (+) 日期和日期时间。 “那么我该如何解决这个问题”?修复什么?
标签: sql-server datetime types sqldatatypes sql-server-2016