Tsql 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

我试图在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 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())
),a
DATE
(当您执行以下操作时会发生:
DATEADD(Day,DATEDIFF(Day,a.StartDate,a.EndDate),a.EndDate)
)或字符串(执行
''
时会发生此情况)。您正试图在同一列中返回3种不同的数据类型