Tsql IIF条件开始日期结束日期整数/日期冲突
我试图在SS-2012中使用IIF语句 我有这个很好用的Tsql IIF条件开始日期结束日期整数/日期冲突,tsql,sql-server-2012,Tsql,Sql Server 2012,我试图在SS-2012中使用IIF语句 我有这个很好用的 SELECT NULLIF(IIF( a.EndDate is null , DATEDIFF(MONTH, a.StartDate, getdate()) , IIF( a.EndDate is not null , DATEDIFF(MONTH, a.StartDate, a.EndDate) , '')),'') AS M
SELECT
NULLIF(IIF( a.EndDate is null
, DATEDIFF(MONTH, a.StartDate, getdate()) ,
IIF( a.EndDate is not null
, DATEDIFF(MONTH, a.StartDate, a.EndDate) , '')),'')
AS Months
,NULLIF(IIF( a.EndDate is null
, DATEDIFF(Day, a.StartDate, getdate()) ,
IIF( a.EndDate is not null
, DATEDIFF(Day, a.StartDate, a.EndDate) , '')),'')
AS DateDays
FROM
TableDates a
我遇到的问题是,如果开始日期和结束日期在同一个日期(我尝试将其默认为1个月和30天或31天,无论是哪个月)
我要走了
int is incompatible with date
在下面尝试时
,NULLIF(
IIF ( (a.EndDate is null) , DATEDIFF(Day, a.StartDate, getdate()) ,
IIF ( (a.StartDate = a.EndDate)
, DATEADD(Day, DATEDIFF(Day, a.StartDate, a.EndDate), a.EndDate),
IIF ( (a.EndDate is not null) , DATEDIFF(Day, a.StartDate, a.EndDate),'')
)),'')
如果日期相同,我如何将天数默认为30-31天,将月份默认为1天?如果您需要将月份的天数显示为默认天数,其中开始日期和结束日期在同一日期,我希望下面的查询对您有用
IIF ( (a.StartDate = a.EndDate),
(datediff(day, a.StartDate, dateadd(month, 1, a.StartDate))),...
并将开始日期和结束日期在同一日期的月份显示为默认值
IIF ( (a.StartDate = a.EndDate),Month(a.StartDate),...
你到底想做什么?现在这只是“这里有一堆令人头痛的代码,为什么它不工作?”还有,你考虑过二月吗?闰年应该很有趣。发生错误是因为
IIF
可以返回INT
(DATEDIFF(Day,a.StartDate,getdate())
)或DATE
(DATEADD(Day,DATEDIFF(Day,a.StartDate,a.EndDate),a.EndDate)
)。不能在同一时间返回两种不同的数据类型column@Lamak还有第三种数据类型(回退是一个空字符串!)@AaronBertrand哦,对了,甚至没有深入到整个嵌套的IIF
s@user1307149正如@AaronBertrand和我所说,您的IIF
可以返回INT
(当您执行以下操作时会发生此情况:DATEDIFF(Day,a.StartDate,getdate())
),aDATE
(当您执行以下操作时会发生:DATEADD(Day,DATEDIFF(Day,a.StartDate,a.EndDate),a.EndDate)
)或字符串(执行''
时会发生此情况)。您正试图在同一列中返回3种不同的数据类型