Sql oracle数据库中的解码功能
请任何人解释一下Oracle DB中的以下SQL语句:Sql oracle数据库中的解码功能,sql,oracle,Sql,Oracle,请任何人解释一下Oracle DB中的以下SQL语句: select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','1') from dual 如果当前是星期一,则返回3(并且区域设置将该天显示为“星期一”),否则返回1 解码(a,b,c,d,e,f,g,…,h)将依次将a与b,d,f等进行比较。如果a是b,则DECODE返回c;如果a是d,则DECODE返回e;等等如果a不是其中任何一个,则DECODE返回h。(h是可选的;如果未给出h,
select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','1') from dual
如果当前是星期一,则返回
3
(并且区域设置将该天显示为“星期一”),否则返回1
解码(a,b,c,d,e,f,g,…,h)
将依次将a
与b
,d
,f
等进行比较。如果a
是b
,则DECODE
返回c
;如果a
是d
,则DECODE
返回e
;等等如果a
不是其中任何一个,则DECODE
返回h
。(h
是可选的;如果未给出h
,则默认返回值为NULL
)首先,让我们从to_char
开始to_char(SYSDATE,'Day')
将显示今天是一周中的哪一天to_char
允许您将日期(在本例中,是您指定的sysdate
后的今天的日期)转换为特定格式的字符串。在这里查看一些其他可使用的日期格式示例:
trim
删除前导空格和尾随空格
现在进行解码
。您可以像if-else语句一样将解码。看看:
在您的特定示例中,您可以将此语句理解为:如果今天是星期一返回3,否则返回1
decode
还允许您执行更复杂的操作,如:
select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','Tuesday',5,'1')
from dual
如果今天是星期一返回3,如果今天是星期二返回5,如果今天是星期二返回1,下面是部分说明:
系统日期
返回的服务器日期为19年4月15日,格式基于本地
to_char(SYSDATE,'Day')
正在转换为字符串并返回星期日,如19年4月15日的星期一
修剪(到字符(SYSDATE,'Day'))
是否在的前后删除空空间
解码函数类似于if-else语句,因此简化了代码。对于当前示例,如果我们使用SQL编写,则应如下所示:
CASE
WHEN TRIM(to_char(SYSDATE,'Day')) = 'Monday' THEN '3'
WHEN TRIM(to_char(SYSDATE,'Day')) = 'Tuesday' THEN '4'
ELSE '1'
END
有关完整参考信息,请参见