T-SQL CASE WHEN BETWEEN 无法识别条件

T-SQL CASE WHEN BETWEEN not recognising condition

我有一个查询试图确定 table 中的日期对于某个 ID 当前是否介于现在和未来的某一天之间。

SELECT
    COUNT(CASE
            WHEN MyDate >= GETDATE() AND MyDate < DATEADD(DAY, 1, GETDATE()) 
               THEN 1
               ELSE 0
          END) AS DatesNearlyOverdue
FROM MyTable
WHERE MyId = 1;

我的问题是 WHEN 条件似乎被忽略了,例如 return 与 WHEN TaskDateDue < GETDATE() THEN 1 相同的结果。我也尝试过使用 DATEDIFFBETWEEN 的条件,但结果总是一样的。

是什么导致所有这些条件return相同的结果?

您正在使用 COUNT,这与计算 01 一样愉快。如果您希望 COUNT 忽略您的 ELSE 值,请使用 NULL 而不是 0:

SELECT
    COUNT(
        CASE
            WHEN MyDate >= GETDATE() AND MyDate < DATEADD(DAY, 1, GETDATE()) THEN 1
            ELSE NULL -- <== Change is here
            END) AS DatesNearlyOverdue
FROM MyTable
WHERE MyId = 1;

话虽如此,该查询的更直接版本是:

SELECT  COUNT(1) AS DatesNearlyOverdue
FROM    MyTable
WHERE   MyId = 1
AND     MyDate >= GETDATE()
AND     MyDate < DATEADD(DAY, 1, GETDATE());

如果你真的想使用THEN 1 ELSE 0分支,因为它使你的代码更容易阅读,你实际上是在寻找SUM():

SELECT
    SUM (
        CASE
            WHEN MyDate >= GETDATE() AND MyDate < DATEADD(DAY, 1, GETDATE()) 
                THEN 1
            ELSE 0
        END) AS DatesNearlyOverdue
FROM MyTable
WHERE MyId = 1;