根据我的理解,DECODE函数用于使用搜索表达式检查条件并显示结果。下面的示例将DECODE函数与名为" SUM":
的组函数一起使用SELECT COUNT(*) "Total",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'1995',1,0)) "1995",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'1996',1,0)) "1996",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'1997',1,0)) "1997",
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),'1998',1,0)) "1998"
FROM employees;
我试图了解它如何与" TO_CHAR"功能和" SUM"功能
以下是问题:
问题1: DECODE函数是否也可以采用具有不同数据类型的值?
例如,如果这些年份用作1995年,1996年而不是1995年' 1996'则查询将成功执行。
问题2:参数" 1"和" 0"是数字并在TO_CHAR函数中使用,它在组函数" SUM"中。当DECODE子句中的数据类型不同时,它如何执行?
请帮忙。
答案 0 :(得分:0)
问题1:DECODE函数是否也可以采用具有不同数据类型的值?
例如,如果年份用作1995年,1996年而不是“1995年”,“1996年”,那么查询将成功执行。
不完全,但确实允许隐式转换。 TO_CHAR正在生成一个字符串值,因此与字符串'1995'
进行比较就可以了。如果第二个参数是数字1995
,那么TO_CHAR结果将被隐式转换为数字以进行比较 - 这也与该日期格式模型有效,因为年份是数字。
如果你有一个带有更多比较的DECODE,那么每个搜索表达式和结果值的数据类型都需要匹配,但你只是在这里进行一次比较。 SUM只能看到0或1。
问题2:参数“1”和“0”是数字并在TO_CHAR函数中使用,它在组函数“SUM”中。当DECODE子句中的数据类型不同时,它如何执行?
1和0不是TO_CHAR函数的一部分,它们是DECODE的第三个和第四个参数。因此,无论用于比较的前两个参数的数据类型如何,每个DECODE的结果都是0或1。 SUM无法查看正在解码的值或搜索表达式或其数据类型。
也许有助于打破嵌套函数调用:
SUM(
DECODE(
TO_CHAR(hire_date,'YYYY'), -- gets a string like '1995'
'1995', -- if the string is '1995' then
1, -- then value is 1
0 -- else value is 0
) -- end of decode, result is 0 or 1
) -- end of sum of 0/1 values