【发布时间】:2013-06-30 17:47:01
【问题描述】:
SQL 不是我的强项,但我不知道为什么它不起作用。我只是想根据一个值运行不同的 AND 语句。具体来说,如果 foo 为 = 0
,我想更改 dateDiff 函数中的 datePartSELECT 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
【问题讨论】:
-
您的查询中有语法错误
-
我不知道为什么,但这是人们在 SQL 中常犯的错误——他们引入了
CASE表达式,而实际上,他们真正需要的只是基本的逻辑运算符。 -
达米恩,想推断一下吗?
-
正如德瓦特的回答,你只需要说
(foo = 0 AND DATEDIFF(dd,...) OR foo!=0 AND DATEDIFF(hh,...)) -
虽然现在我来看看它,但我相当肯定,无论你的目标是什么,那些
DATEDIFF调用并没有像你想象的那样做。提示:DATEDIFF返回一个整数,它(如果与datetime比较)将隐式转换为datetime,作为自1900-01-01以来的天数。而DATEDIFF的第三个参数是一个日期,2会隐式转换为1900-01-03
标签: sql sql-server sql-server-2012 case where