日付のあるデータセットがあり、日付の順序が正しいかどうかを確認したいのですが。すべての場合において正しい注文のnull可能な日付の値を確認してください。
RecordID Date1 Date2 Date3 Date4
1 2011-05-10 2011-08-16 NULL 2011-11-22
2 NULL 2012-02-03 2012-02-27 2012-03-05
3 2011-05-30 2011-05-11 2011-08-17 2011-09-15
4 2011-05-30 NULL NULL NULL
日付が設けられている場合には、これは保持する必要があります:日付1 <日付2 < Date3 < Date4を。レコードに特定の日付のNULL値が含まれている場合は、NULLでない日付の間でチェックを行う必要があります。だから、これは私が望む結果である:
RecordID Date1 Date2 Date3 Date4 CheckDates
1 2011-05-10 2011-08-16 NULL 2011-11-22 correct
2 NULL 2012-02-03 2012-02-27 2012-03-05 correct
3 2011-05-30 2011-05-11 2011-08-17 2011-09-15 incorrect
4 2011-05-30 NULL NULL NULL correct
私は、このための広範なCASE文を書いたが、よりエレガントな解決策が存在しなければならない:
CASE
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NULL AND Date4 IS NULL THEN 'correct'
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NULL AND Date4 IS NOT NULL THEN 'correct'
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NOT NULL AND Date4 IS NULL THEN 'correct'
WHEN Date1 IS NULL AND Date2 IS NULL AND Date3 IS NOT NULL AND Date4 IS NOT NULL AND Date3 < Date4 THEN 'correct'
...
ELSE 'incorrect'
END
任意のアイデア?
EDIT:
私は(私は現実世界の問題に4を得た、と変更した上で与えた最初の例では3つの列よりも「日」の列にできるソリューションを探しています問題を単純化するためには3つにするが、この単純化では大きな特徴を失ったようだ)。 4列の例を更新しました。
このルールに値を制約するだけで済みますか、行に対して「正しい/間違った」結果を得る必要はありますか? – Oded
既存のデータに対する「正しい/間違った」チェックです。 – Josien
したがって、行内のデータがルールに準拠しているかどうかを返す必要がありますか? – Oded