2014-09-03 110 views
0

我試圖使用SS-2012的IIF報表/日期IIF有條件的起始日期結束日期INT碰撞

我有這個工作正常

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天的任何一個月是)

我gettiing

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,如果日期是一樣的嗎?

+2

你究竟在做什麼?現在這只是「這是一堆令人頭痛的代碼,爲什麼它不起作用?」另外,你有沒有考慮二月?閏年應該很有趣。 – 2014-09-03 20:38:44

+0

我正在嘗試使用'IIF'語句沒有幫助。你爲什麼使用它們?爲什麼不是老式的'CASE'表達?這個代碼實際上是用什麼來實現的?哪些數據類型是你的列? – Zane 2014-09-03 20:41:52

+2

錯誤發生的原因是您的'IIF'可以返回'INT'('DATEDIFF(Day,a.StartDate,getdate())')或'DATE'('DATEADD(Day,DATEDIFF(Day,a.StartDate, a.EndDate),a.EndDate)')。您不能在同一列中返回2種不同的數據類型 – Lamak 2014-09-03 20:43:01

回答

1

如果你需要顯示在那裏開始日期和結束日期是在同一天的話,我希望下面的查詢會爲你工作

IIF ((a.StartDate = a.EndDate), 
    (datediff(day, a.StartDate, dateadd(month, 1, a.StartDate))),... 

,並顯示出該月的月爲默認的天數作爲默認開始日期和結束日期在同一日期

IIF ((a.StartDate = a.EndDate),Month(a.StartDate),... 
相關問題