【发布时间】:2014-08-11 22:38:42
【问题描述】:
我有一个包含日期的数据集,想检查日期顺序是否正确。
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
在提供日期的所有情况下,这应该满足:Date1
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
有什么想法吗?
编辑:
我正在寻找一种解决方案,它允许比我上面给出的第一个示例中的三列更多的“日期”列(我在现实世界的问题中有四个,并将其更改为三个以简化问题,但似乎通过这种简化,我失去了一个重要的特征)。更新了四列的示例。
【问题讨论】:
-
您只是需要将值约束到此规则,还是需要获得行的“正确/不正确”结果?
-
这是对现有数据的“正确/错误”检查。
-
那么,你需要每行返回其中的数据是否符合规则?
标签: sql sql-server-2008 tsql