Sql oracle数据库中的解码功能

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,

请任何人解释一下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
,则默认返回值为
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
有关完整参考信息,请参见