【发布时间】:2018-10-30 03:10:31
【问题描述】:
我有一个表格,其中我们有额外的日期列供操作人员用来定义租约的结束,但我试图运行的案例语句没有返回我需要的日期。
下面是我的桌子:
extra_date_08 | extra_date_07 | extra_date_06 | extra_date_05 | Tency_st_dt
--------------+----------------+---------------+---------------+------------
NULL | NULL | NULL | NULL | 2013-11-30
NULL | NULL | NULL | 2023-04-29 | 2013-04-27
NULL | NULL | NULL | 2023-04-10 | 2013-04-09
我需要的是结果按大小写的顺序返回结束日期,如果 null 移动到下一个 when 部分直到它用完否则它应该将结束日期定义为 else子句:
End Date |
------------
2018-11-30 |
2023-04-29 |
2023-04-10 |
SELECT
CASE
WHEN h.extra_date_08 <> NULL
THEN h.extra_date_08
WHEN h.extra_date_07 <> NULL
THEN h.extra_date_07
WHEN h.extra_date_06 <> NULL
THEN h.extra_date_06
WHEN h.extra_date_05 <> NULL
THEN h.extra_date_05
ELSE DATEADD(yyyy,5,CAST(A.tency_st_dt AS DATE))
END 'End Date',
【问题讨论】:
-
其他答案都是正确的。只是为了获得更多信息,您的查询不起作用的原因是大多数 DBMS 支持三值逻辑 - {True、False 和 Unknown}。由于 NULL 表示没有数据,因此这些值是 Unknown 而不是 True 或 False。例如,如果我不知道自己的年龄,则为 NULL。所以“MyAge 30”这句话不是真或假。我可能30岁,我可能不会。这就是您需要 IS NULL 运算符的原因。
-
@Error_2646,这实际上是问题的答案。其他只是更正的代码。如果你发布了,我会赞成。
-
Case expression - 因为它返回一个值。 (case语句没有返回值,只是代码的条件执行。)
标签: sql