eomonth 操作数类型冲突(消息 2016)

eomonth operand type clash (Msg 2016)

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

错误信息:

Msg 2016, Level 16.
operand type clash. date is incompatible with int.

第二行出现错误。 使用 SQL 服务器 2016。

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

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

在 SQL 服务器中,您可以将数字添加到 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, ) 是更好的解决方案,因为意图更明确。