oracle数据库中的解码函数

时间:2012-02-19 23:21:07

标签: sql oracle

任何人都可以从Oracle DB中解释以下SQL语句:

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

3 个答案:

答案 0 :(得分:25)

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

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

trim删除了前导空格和尾随空格。

现在为decode。您可以将decode视为if else语句。看看:

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

答案 1 :(得分:13)

如果它当前是星期一(并且语言环境使得日期呈现为“星期一”),则返回3,否则返回1

DECODE(a, b,c, d,e, f,g, ..., h)将依次将abdf等进行比较。如果ab,则DECODE会返回c;如果ad,则DECODE会返回e;等等。如果a不是其中任何一项,则DECODE会返回h。 (h是可选的;如果未提供h,则默认返回值为NULL。)

答案 2 :(得分:0)

下面是部分说明:

  

SYSDATE

正在返回服务器日期,例如15-APR-19,其格式基于本地

  

to_char(SYSDATE,'Day')

正在转换为字符串,并返回日期为15年4月15日的星期一(星期一)

  

TRIM(to_char(SYSDATE,'Day'))

正在删除

前后的空白

解码功能类似于if语句,因此可以简化代码。对于当前示例,如果我们用SQL编写,则应如下所示:

CASE 
  WHEN TRIM(to_char(SYSDATE,'Day')) = 'Monday'  THEN '3'
  WHEN TRIM(to_char(SYSDATE,'Day')) = 'Tuesday' THEN '4'
  ELSE '1' 
END

有关完整参考,请参见https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm