eomonth操作数类型冲突(Msg 2016)

时间:2019-07-19 13:59:29

标签: sql sql-server datetime-format

DECLARE @DateMin AS date = DATEFROMPARTS(2019, 7, 19);
DECLARE @DateTimeMax AS datetime = EOMONTH(@DateMin)+1;

错误消息:

  

信息2016,级别16。
  操作数类型冲突。日期与int不兼容。

第二行出现错误。 使用SQL Server 2016。

2 个答案:

答案 0 :(得分:4)

错误告诉您问题所在,dateint不兼容。使用DATEADD

DECLARE @DateMin AS date = DATEFROMPARTS(2019, 7, 19);
DECLARE @DateTimeMax AS datetime = DATEADD(DAY, 1, EOMONTH(@DateMin));

答案 1 :(得分:1)

在SQL Server中,可以将数字添加到datetime以添加天数,但是不能添加到date。因此,如果您坚持使用此构造,则可以通过两种方式解决此问题:

DECLARE @DateMin datetime = DATEFROMPARTS(2019, 7, 19);
-----------------^ change type to datetime
DECLARE @DateTimeMax datetime = DATEADD(DAY, 1, EOMONTH(@DateMin));

或者:

DECLARE @DateMin date = DATEFROMPARTS(2019, 7, 19);
DECLARE @DateTimeMax datetime = CONVERT(datetime, DATEADD(DAY, 1, EOMONTH(@DateMin)));
--------------------------------^ add explicit conversion

我确实认为dateadd(day, )是更好的解决方案,因为其意图更加明确。