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。
错误告诉你问题所在,date
和int
不兼容。使用 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, )
是更好的解决方案,因为意图更明确。
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。
错误告诉你问题所在,date
和int
不兼容。使用 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, )
是更好的解决方案,因为意图更明确。