2012-02-19 60 views
4

谁能请从Oracle数据库解释下面的SQL语句:解码功能

select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','1') from dual 

回答

18

首先,让我们从to_char开始。 to_char(SYSDATE,'Day')会给你今天这一周的一天。 to_char可让您将某个日期(在本例中为指定sysdate后的今天日期)转换为特定格式的字符串。看看这里你可以使用的日期格式的其他一些例子:

http://www.techonthenet.com/oracle/functions/to_char.php

trim除去开头和结尾的空白。

现在为decode。你可以像012 else语句那样想到decode。看一看:

http://www.techonthenet.com/oracle/functions/decode.php

在你的具体的例子,你可以阅读本声明的:如果今天是星期一返回3否则返回1.

decode也可以让你做的事情有点多复杂的是这样的:

select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','Tuesday',5,'1') 
from dual 

这将是:如果今天是星期一返回3,否则,如果今天是星期二返回5,否则返回1

11

,将返回3,如果它是目前周一(和场景是这样的:一天被渲染为“星期一” ),否则为1

DECODE(a, b,c, d,e, f,g, ..., h)将依次比较abd,f等。如果ab,则DECODE返回c;如果ad,则DECODE返回e;等等。如果a不是这些中的任何一个,则DECODE返回h。 (h是可选的;如果未给出h,则默认返回值为NULL。)