我有一个CASE声明,我被挂断了。这只是一个简单的陈述,但使用>
和<
运算符。它不是让我在逻辑中使用它们。以下是我的发言:
case DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2)
when 1 Then 'Now'
when > 1 Then 'After'
when < 1 Then 'Tomorrow'
else 'N/A' end AS 'Status'
我在<
和>
行上给出了错误,您是否无法在CASE语句中使用这些错误?
答案 0 :(得分:3)
这一行:
DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2)
实际上需要进行每次when
比较。
可能有一种方法可以使它更简洁,但是如果你使用它,它应该可以工作。
case
when (DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2)) = 1 Then 'Now'
when (DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2)) > 1 Then 'After'
when (DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2)) < 1 Then 'Tomorrow'
else 'N/A'
end AS 'Status'
答案 1 :(得分:1)
&#34;短手&#34;您使用的符号仅具有相等性 - 如果您需要使用其他运算符,则需要在WHEN
子句中包含值表达式:
case
when DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2) = 1 Then 'Now'
when DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2) > 1 Then 'After'
when DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2) < 1 Then 'Tomorrow'
else 'N/A'
end AS 'Status'
答案 2 :(得分:0)
您必须使用searched CASE expression。你可以这样做:
;WITH DATA(Val) AS
(
SELECT DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2)
FROM YourTable
)
SELECT CASE WHEN Val = 1 THEN 'Now'
WHEN Val > 1 THEN 'After'
WHEN Val < 1 THEN 'Tomorrow'
ELSE 'N/A' END AS Val
FROM DATA;
答案 3 :(得分:0)
无需进行三次数据计算,请改用SIGN
函数:
select case sign(DATEDIFF(d, date1, GETDATE()) - (DATEDIFF(ww, date2, GetDate()) * 2))
when 0 Then 'Now'
when 1 Then 'After'
when -1 Then 'Tomorrow'
else 'N/A' end AS Status
答案 4 :(得分:0)
您的代码将在JAVA环境中发声,但在SQL中,您必须在case语句中指定操作数。在变量中定义它,例如@myDate = GETDATE()或在案例中使用函数: WHEN(DATEDIFF(d,date1,GETDATE()) - (DATEDIFF(ww,date2,GetDate())* 2)那......