データベースに日付が含まれているはずなので、日付をチェックして正しい日付を作成する必要があります。 (日付は今年まだ来ていない場合には、私は日が経過した場合、私は2018を設定する、2017を設定したい) (t.myDateがNULL可能日時です)データ型の日付を構成できません。一部の引数に無効な値があります。
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式が期待通りに機能していません。また
:それはNULL行のwhere句を使用することを助けていません:
WHERE t.myDate IS NOT NULL
にはどうすればデータ品質の問題を見つけることができる、そしてどのように私はそれを回避することができますか?
(私はSQL Server 2012のを使用しています)
ありがとう、私はそれを確認しようとします – Skywise
はい、それは働いた! WHAT(DATEPART(MONTH、t.myDate)= 2 AND DATEPART(DAY、t.myDate)= 29) \t \tその後、DATEPROMPARTS( '2018'、DATEPART(MONTH、 tMyDate)、DATEPART(DAY、DATEADD(DAY、-1、t.myDate))) – Skywise