【问题标题】:The data types date and datetime are incompatible in the add operator数据类型 date 和 datetime 在 add 运算符中不兼容
【发布时间】: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)

其中@CurrentDateDateTime 变量并作为'2016-11-09 15:35:00'传递给我的函数

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

谢谢

【问题讨论】:

  • 只需将其转换为日期,然后再转换为日期时间。 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 和
  • 谢谢。你拯救了这一天。请发布它作为答案。
  • 很高兴帮助马克西姆斯
  • 我不明白这个问题,你在比较苹果和橘子。由于+,第一个SQL 是错误的。在第二个 SQL 中,您没有将它们加在一起,+ 存在的任何问题显然甚至不存在于该 SQL 中。你在这里有什么问题?基本上,SQL Server 告诉您不能添加 (+) 日期和日期时间。 “那么我该如何解决这个问题”?修复什么?

标签: sql-server datetime types sqldatatypes sql-server-2016


【解决方案1】:

只需将其转换为日期,然后再转换为日期时间。

select cast(cast('2016-11-09 15:35:00' as date) as datetime)

要多获得 1 天,请使用:

dateadd select dateadd(dd,1,cast(cast('2016-11-09 15:35:00' as date) as datetime))

我不是 between 运算符的超级粉丝,所以当我处理日期时间时,我倾向于使用 > startDate 和

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多