下面的sql语句打印什么,并附上说明:
SELECT DECODE (2, 2, DECODE(3, 7, 2, 4, 5, 6)) FROM DUAL
我仅了解解码功能,但想确保我对解码功能内部解码的回答
答案 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,因为它或多或少会减少代码。