3

SQL 不是我的强项,但我无法弄清楚为什么这不起作用。我只是想根据一个值运行不同的 AND 语句。具体来说,如果 foo 为 = 0,我想更改 dateDiff 函数中的 datePart

SELECT foo,
       bar,
       test
FROM table
WHERE bar = 1,
CASE WHEN foo = 0
        AND dateDiff(dd, getDate(), 2 ) < test
ELSE
        AND dateDiff(hh, getDate(), 2 ) < test
END
4

3 回答 3

8

试试这个——

SELECT foo,
       bar,
       test
FROM [table]
WHERE bar = 1
    AND (
            (
                foo = 0 
                AND 
                DATEDIFF(dd, GETDATE(), 2 ) < test
            )
        OR  
            DATEDIFF(hh, GETDATE(), 2 ) < test
        )
于 2013-07-03T06:35:42.283 回答
5

你可以这样尝试

SELECT foo,
       bar,
       test
FROM table
WHERE bar = 1 And
(CASE WHEN foo = 0
    then   dateDiff(dd, getDate(), 2 )
ELSE
       dateDiff(hh, getDate(), 2 ) 
END)<test
于 2013-07-03T06:36:23.027 回答
5

如果我不得不猜测您的实际目标,那就是您想从中减去 2 小时或几天GETDATE()以用于比较。

这就是我认为你的目标:

SELECT foo,
       bar,
       test
FROM table
WHERE bar = 1 AND
(
   (foo = 0 AND DATEADD(day,-2, GETDATE()) < test)
   OR
   (foo<>0 AND DATEADD(hour,-2,GETDATE()) < test)
)

我不认为你真的打算打那些DATEDIFF电话。例如,今天(2013 年 7 月 3 日),这个表达式:

select CAST(DATEDIFF(dd,getdate(),2) as datetime)

产生1786-07-031。我假设这test是一个datetime并且正在执行隐式转换。即使不是, 的数值也DATEDIFF(dd,getdate(),2)将始终是一个很大的负数(除非或直到它在GETDATE()返回 20 世纪之前的值的机器上运行)


1奇怪的是,我认为 7 月 3 日是一年中唯一一个结果将具有相同月份和日期的日子。

于 2013-07-03T06:56:38.000 回答