SQL Server 2016中EOMONTH操作遇Msg 2016类型冲突错误求助
解决SQL Server 2016中date与int类型冲突的错误
嘿,这个问题我太熟悉了!你遇到的Msg 2016错误,本质是SQL Server不允许直接对date类型和整数做加法运算。
错误原因分析
你代码里的EOMONTH(@DateMin)函数返回的是date类型的值,而你直接在后面加1(整数),SQL Server无法识别这种跨类型的运算,所以抛出了“操作数类型冲突:date与int不兼容”的错误。
两种可行的解决方案
方案1:将date类型转换为datetime后再做加法
因为datetime类型支持与整数相加(整数代表天数),我们可以先把EOMONTH的结果转成datetime:
DECLARE @DateMin AS date = DATEFROMPARTS(2019, 7, 19); DECLARE @DateTimeMax AS datetime = CAST(EOMONTH(@DateMin) AS datetime) + 1;
方案2:使用DATEADD函数(更推荐)
用DATEADD函数来实现“在月末日期上加1天”的逻辑,可读性更强,也避免了类型转换的潜在问题,兼容性更好:
DECLARE @DateMin AS date = DATEFROMPARTS(2019, 7, 19); DECLARE @DateTimeMax AS datetime = DATEADD(day, 1, EOMONTH(@DateMin));
额外说明
DATEADD是SQL Server处理日期增减的标准函数,不管是date还是datetime类型都能直接处理,所以更推荐你用这个方案,代码逻辑也更清晰。
内容的提问来源于stack exchange,提问作者Ludovic Aubert
相关产品推荐
相关产品推荐

