我試圖檢查另一個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
這裏最大的問題是將日期存儲爲varchar。然後你的varchar值不存儲在ANSI標準中。您需要添加適當的樣式以確保轉換髮生的方式。 –