【发布时间】:2020-11-05 06:36:02
【问题描述】:
我被告知要获得 1996 年 5 月 5 日之后的所有订单,包括未发货的订单。
NULL 值应为“未发货”。它有效,但我无法再比较日期了。
我确信有一种方法可以正确地做到这一点,我不知道。有什么想法吗?
SELECT [OrderID] AS 'Order Number',
CASE
WHEN [ShippedDate] IS NULL THEN 'Not Shipped'
END AS 'Shipped Date'
FROM Orders
WHERE [ShippedDate] IS NULL OR [ShippedDate] > '05/06/1996' -- This line doesn't work
【问题讨论】:
-
试试默认日期格式
'1996-05-06' -
@Juergen - 这可能是问题的答案。然而,正如 Aaron Bertrand 向我指出的那样,这也是一种模棱两可的日期格式(我也做了同样的假设,认为它是可以的)。有关信息,请参阅stackoverflow.com/a/63958638/14267425 上的 cmets,有关最近的示例,请参阅 stackoverflow.com/questions/64679099/…,我建议您改用 '19960506'
-
另外,需要根据所选日期获取正确的关系运算符(> 或 >=),例如,“1996 年 5 月 5 日之后制造”将是
>= '19960506或> '19960505,但不是 @ 987654328@,因为后者将在 5 月 5 日跳过这些。 -
我忘了说问题是非空值变为空。我试图做 ELSE [ShippedDate] 但它抛出了一个异常
-
来自
case: "ELSE else_result_expression 如果没有比较运算结果为 TRUE,则返回表达式。如果省略此参数且没有比较运算结果为 TRUE,则 CASE 返回空。”