SQL中的解码功能内的解码功能

时间:2019-09-11 18:35:07

标签: sql decode

下面的sql语句打印什么,并附上说明:

SELECT DECODE (2, 2, DECODE(3, 7, 2, 4, 5, 6)) FROM DUAL

我仅了解解码功能,但想确保我对解码功能内部解码的回答

4 个答案:

答案 0 :(得分:1)

它打印出6。

语法为DECODE(expression,search,result [,search,result] ... [,default])

In your example 
    In the first DECODE 2 is the expression
    the next 2 is what the first 2 will be compared to
    the next DECODE is the result if 2 = 2

    In the second DECODE 3 is the expression
    It is compared to the 7 and the 4.
    The results could be 2 or 5
    Finally if the 3 doesn't match the 7 or the 4 then 6 is the result.
IF 2 = 2 THEN
  IF 3 = 7 THEN 
    2
  ELSIF 3 = 4 THEN
    5
  ELSE 6
END IF

答案 1 :(得分:0)

了解查询

option

您需要了解解码功能。

来自http://www.java2s.com/Tutorial/Oracle/0300__Conversion-Functions/UsingtheDECODEFunction.htm

  

DECODE(值,搜索值,结果,默认值)将值与搜索值进行比较。如果值相等,则DECODE()返回结果,否则返回default_value。 DECODE()允许您在SQL中执行if-then-else逻辑,而不必使用PL / SQL。

最好是https://www.oracletutorial.com/oracle-comparison-functions/oracle-decode/,其中包含一些if / then / else的明确示例。

结果是6。

答案 2 :(得分:0)

解码语法如下所示

DECODE(expression,search,result [,search,result] ... [,default])

现在将您的值放在这里: 在您的情况下,表达式为:2 搜索是:2

表达式与搜索匹配,因此结果为 DECODE(3,7,2,4,5,6)。结果再次是解码,因此将应用相同的模式。但是在这种情况下,没有表达式(3)和搜索匹配(7,4),因此将选择默认值(6)。

最终结果将为6。

如果您要从第二次解码中删除6,则将返回NULL。

答案 3 :(得分:0)

一般来说,
DECODE(表达式,值/ false,                 值/ true)

这就像                IIF(表达式,值,true,false)

        IIF(2=2,     
                  - -TRUE
         IIF(3=7, 2,  - - 2 is true
               , IIF(3=4, 5,  - - 5 is true
                 6)) - - false)
          , 2)

解码用于IIF,因为它或多或少会减少代码。