我需要計算SQL 2005中Reporting Services中報表的兩個日期(facility_start_date,facility_end_date)之間的差異。如果facility_end_date爲null,則需要使用報表參數@EndDate在計算中。但是,如果facility_end_date大於參數@EndDate,那麼它也需要使用參數@EndDate。下面的代碼工作正常,除了如果facility_end_date大於參數@EndDate,它仍然在facility_start_date和facility_end_date之間計算,而不是在facility_start_date和@EndDate之間計算。任何幫助,將不勝感激。如何使用多個DATEDIFF變量編寫CASE WHEN語句
CASE WHEN facility_start_date > facility_end_date THEN
NULL
WHEN DATEPART(day , facility_start_date) > DATEPART(day , facility_end_date) THEN
DATEDIFF(d , facility_start_date , ISNULL(facility_end_date , @EndDate)) - 1
WHEN DATEPART(day , .facility_end_date) > DATEPART(day , @EndDate) THEN
DATEDIFF(d , facility_start_date , @EndDate) - 1
ELSE DATEDIFF(d , facility_start_date , ISNULL facility_end_date , @EndDate))
END
你知道表別名嗎?它可以幫助您查詢的可讀性。 – 2010-06-14 20:02:06
你意識到你實際上並沒有計算DATE的差異,但是DAY的差異。一旦你跨越了一個月的邊界,這段代碼就會出現問題。編輯爲 – Kenneth 2010-06-14 20:19:44
以使代碼易讀。 – Andrew 2010-06-14 20:52:04