0
我的數據庫中有一個日期,它不應該包含年份,所以我需要通過檢查日期來構造正確的日期。 (如果日期尚未今年來,我要定2017年,如果日期已過,我要定2018) (t.myDate是一個可爲空的日期時間)無法構造數據類型日期,某些參數的值無效
SELECT
NewDate = CASE
WHEN DATEPART(dayofyear, GETDATE()) < DATEPART(dayofyear, t.myDate)
THEN DATEFROMPARTS('2017', DATEPART(MONTH,t.myDate), DATEPART(DAY, t.myDate))
ELSE DATEFROMPARTS('2018', DATEPART(MONTH,t.myDate), DATEPART(DAY,t.myDate))
END
FROM
MyTable t
然而,在一些我收到以下錯誤消息:
無法構造數據類型日期,某些參數的值無效。
我不知道是什麼問題,但我知道有些行是NULL。所以,我曾嘗試使用CASE表達式來解決這個問題簡單地使用今天的日期在哪裏的問題情況:
SELECT
NewDate = CASE
WHEN t.myDate is null
THEN GETDATE()
WHEN DATEPART(MONTH,t.myDate) < 1
THEN GETDATE()
WHEN DATEPART(MONTH,t.myDate) > 12
THEN GETDATE()
WHEN DATEPART(DAY,t.myDate) < 1
THEN GETDATE()
WHEN DATEPART(DAY,t.myDate) > 31
THEN GETDATE()
WHEN ISDATE(t.myDate) = 0
THEN GETDATE()
WHEN DATEPART(dayofyear, GETDATE()) < DATEPART(dayofyear, t.myDate)
THEN DATEFROMPARTS('2017', DATEPART(MONTH,t.myDate), DATEPART(DAY, t.myDate))
ELSE DATEFROMPARTS('2018', DATEPART(MONTH,t.myDate), DATEPART(DAY,t.myDate))
END
FROM
MyTable t
但我仍然得到同樣的錯誤。要麼我正在測試錯誤的數據質量問題,要麼CASE表達式沒有按照我預期的那樣工作。
另外:它不利於使用,其中對於空行子句:
WHERE t.myDate IS NOT NULL
我怎樣才能找到數據的質量問題,以及如何圍繞它得到什麼?
(我使用SQL Server 2012)
謝謝,我會嘗試檢查 – Skywise
是的,它的工作!添加以下作爲第一個CASE子句修復它: 當(DATEPART(MONTH,t.myDate)= 2和DATEPART(DAY,t.myDate)= 29) \t \t THEN DATEFROMPARTS('2018',DATEPART(MONTH, t.myDate),DATEPART(DAY,DATEADD(DAY,-1,t.myDate))) – Skywise