gpt4 book ai didi

sql - 检查可为空的日期值以获得正确的顺序

转载 作者:行者123 更新时间:2023-12-04 17:38:33 25 4
gpt4 key购买 nike

我有一个带日期的数据集,想检查日期顺序是否正确。

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 < Date2 < 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

有任何想法吗?

编辑:
我正在寻找一种解决方案,它允许比上面给出的第一个示例中的三列更多的“日期”列(我的实际问题中有四个,并将其更改为三个以简化问题,但似乎我已经失去了这种简化的一个重要特征)。更新了四列的示例。

最佳答案

您可以使用 ISNULLCOALESCE跳过空值。如果缺少日期,只需将其替换为始终通过检查的日期:

CASE
WHEN (ISNULL(Date1, '01/01/1900') < COALESCE(Date2, Date3, Date4, '01/01/3000'))
AND (ISNULL(Date2, '01/01/1900') < COALESCE(Date3, Date4, '01/01/3000'))
AND (ISNULL(Date3, '01/01/1900') < COALESCE(Date4, '01/01/3000'))
THEN 'correct'
ELSE 'incorrect'
END

这假设您的“真实”日期永远不会超出 1900 - 3000 的范围;下一个千年虫正在等待发生;)

编辑:编辑以处理四个字段

关于sql - 检查可为空的日期值以获得正确的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10500755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com