我是否需要在此CASE WHEN语句中添加更多条件?

时间:2017-07-19 07:08:42

标签: sql oracle case

我是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

不要介意那之后会发生什么。

2 个答案:

答案 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

只有第一个会运行。