2017-02-13 69 views
0

enter image description here驗證CAST日期值比不工作

我試圖檢查另一個CAST日期值時,如果一個VARCHAR值我鑄造的日期值,然後檢查是否鑄造值大於另一個並不如預期的那樣工作。

我附上了一張圖片s.EFFECTIVE_DATE不是大於t.StatusEffectiveDate以及爲什麼它會顯示在我的結果集中。這是我的問題。

這裏是我的代碼,其中加粗且語句中的WHERE子句下面,如果問題:

DECLARE @peims2016SnapshotDate date = '2016-10-28' 
     SELECT t.StudentID, t.Status, s.status, t.StatusEffectiveDate, s.effective_date, t.enddate, @peims2016SnapshotDate as peimssnapshotdate, CONVERT(VARCHAR(10), DATEADD(day, -1, t.Enddate),101) as NewEndDate 
     FROM Mcsfwisdtest.FRA.dbo.vw_HHSurvey s 
     INNER JOIN Fwisddw.dbo.Focus_Export_Econ_DisadvantagedHHS_TEST t 
     ON s.CustomerID = t.StudentID 
     AND s.SiteID = LocationID 
     WHERE CAST(t.Enddate as date) > @peims2016SnapshotDate 
     **AND CAST(s.effective_date as date) > CAST(t.StatusEffectiveDate as date)** 
     AND t.[Status] = 'PAID' AND s.[Status] != 'PAID' 
     OR (t.[Status] = 'REDUCED' AND s.[Status] = 'FREE') 
     ORDER BY t.StudentID asc 
+3

這裏最大的問題是將日期存儲爲varchar。然後你的varchar值不存儲在ANSI標準中。您需要添加適當的樣式以確保轉換髮生的方式。 –

回答

4

您需要使用正確的方式(而你的情況是風格101)轉換爲date

DECLARE @peims2016SnapshotDate date = '2016-10-28' 

SELECT t.StudentID, 
     t.Status, 
     s.status, 
     t.StatusEffectiveDate, 
     s.effective_date, 
     t.enddate, 
     @peims2016SnapshotDate as peimssnapshotdate, 
     CONVERT(VARCHAR(10),DATEADD(DAY,-1,t.Enddate),101) as NewEndDate 
FROM Mcsfwisdtest.FRA.dbo.vw_HHSurvey s 
INNER JOIN Fwisddw.dbo.Focus_Export_Econ_DisadvantagedHHS_TEST t 
    ON s.CustomerID = t.StudentID 
    AND s.SiteID = LocationID 
WHERE CAST(t.Enddate as date) > @peims2016SnapshotDate 
AND CONVERT(date,s.effective_date,101) > CONVERT(date,t.StatusEffectiveDate,101) 
AND ((t.[Status] = 'PAID' AND s.[Status] != 'PAID') 
OR (t.[Status] = 'REDUCED' AND s.[Status] = 'FREE')) 
ORDER BY t.StudentID asc; 
+0

我的歉意。這工作。我感謝您的幫助!謝謝。 – Melinda

+0

@梅林達我明白了。您的'OR'條件中的邏輯有另一個錯誤。我現在更新了我的答案 – Lamak

+0

謝謝Lamak。我感謝你的時間和幫助。 – Melinda