我是SQL的新手,所以我不确定这是否有用。我会亲自尝试,但目前我不能,因为我无法访问数据从中获取的服务器。事情是,例如我的第三个条件是真的,其他条件也是如此。我是否必须在条件中添加任何内容以使之前的内容变为虚假或者是否有效并且"忽略"以前的那些?
CASE WHEN
TO_CHAR(f.time, 'dd.mm.yyyy HH24:mi:ss') < TO_CHAR(SYSDATE, 'MM-DD-YYYY
HH24:MI:SS')
THEN .....
WHEN TO_CHAR(f.time, 'dd.mm.yyyy HH24:mi:ss') + 2/24 < TO_CHAR(SYSDATE, 'MM-
DD-YYYY HH24:MI:SS')
THEN .....
WHEN TO_CHAR(time, 'dd.mm.yyyy HH24:mi:ss') + 4/24 < TO_CHAR(SYSDATE, 'MM-
DD-YYYY HH24:MI:SS')
THEN .....
END bar
不要介意那之后会发生什么。
答案 0 :(得分:1)
您可以重新排序WHEN
表达式,并从最不可能的(最严格的)开始。
CASE WHEN
TO_CHAR(time, 'dd.mm.yyyy HH24:mi:ss') + 4/24 < TO_CHAR(SYSDATE, 'MM-
DD-YYYY HH24:MI:SS')
THEN .....
WHEN TO_CHAR(f.time, 'dd.mm.yyyy HH24:mi:ss') + 2/24 < TO_CHAR(SYSDATE, 'MM-
DD-YYYY HH24:MI:SS')
THEN .....
WHEN TO_CHAR(f.time, 'dd.mm.yyyy HH24:mi:ss') < TO_CHAR(SYSDATE, 'MM-DD-YYYY
HH24:MI:SS')
THEN .....
END bar
此文档为here:
在搜索的CASE表达式中,Oracle从左到右搜索,直到找到条件为true的情况,然后返回return_expr。如果发现没有条件为真,并且存在ELSE子句,则Oracle返回else_expr。否则,Oracle返回null。
答案 1 :(得分:0)
它不会忽略以前的情况。说实话,只有第一个将在你的情况下运行。 所以,是的。你应该添加一些条件,使前两个为假,并留下最后一个为真。
在这种情况下:
CASE WHEN 0=1 THEN ...
WHEN 0=2 THEN ...
WHEN 1=1 THEN ...
END
只有第三个会运行。
在这种情况下:
CASE WHEN 1=1 THEN ...
WHEN 2=2 THEN ...
WHEN 0=0 THEN ...
END
只有第一个会运行。