ORACLE中DECODE函数使用的参数
Arguments used in the DECODE function in ORACLE
根据我的理解,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" 函数一起工作。
- 示例中使用的TO_CHAR函数将日期数据类型转换为字符数据类型,并将值与搜索值(1995、1996等)进行比较,并计算结果。
- 但是,SUM 函数只能用于数字数据类型。
问题如下:
问题 1:DECODE 函数是否也可以取不同数据类型的值?
例如,如果使用年份为 1995、1996 而不是 '1995'、'1996',则查询将成功执行。
问题2:参数“1”和“0”是数字,用在TO_CHAR函数中,在组函数中"SUM".当DECODE子句中的数据类型不同时如何执行?
请帮忙。
Question 1: Can the DECODE function also take the values that have different data types?
For instance, if the years are used as 1995, 1996 instead '1995', '1996', then the query gets executed successfully.
不完全是,但它确实允许隐式转换。 TO_CHAR 正在生成一个字符串值,因此可以与字符串 '1995'
进行比较。如果第二个参数是数字 1995
而不是 TO_CHAR 结果将被隐式转换为数字以进行比较 - 这对于该日期格式模型也是有效的,因为年份是数字。
如果您有一个包含更多比较的 DECODE,那么每个搜索表达式和结果值的数据类型都需要匹配,但您在这里只进行一次比较。而 SUM 只能看到 0 或 1。
Question 2: The arguments "1" and "0" are numeric and used in the TO_CHAR function, and which is inside the group function "SUM". How does it execute when the data types in the DECODE clause are different?
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
根据我的理解,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" 函数一起工作。
- 示例中使用的TO_CHAR函数将日期数据类型转换为字符数据类型,并将值与搜索值(1995、1996等)进行比较,并计算结果。
- 但是,SUM 函数只能用于数字数据类型。
问题如下:
问题 1:DECODE 函数是否也可以取不同数据类型的值?
例如,如果使用年份为 1995、1996 而不是 '1995'、'1996',则查询将成功执行。
问题2:参数“1”和“0”是数字,用在TO_CHAR函数中,在组函数中"SUM".当DECODE子句中的数据类型不同时如何执行?
请帮忙。
Question 1: Can the DECODE function also take the values that have different data types?
For instance, if the years are used as 1995, 1996 instead '1995', '1996', then the query gets executed successfully.
不完全是,但它确实允许隐式转换。 TO_CHAR 正在生成一个字符串值,因此可以与字符串 '1995'
进行比较。如果第二个参数是数字 1995
而不是 TO_CHAR 结果将被隐式转换为数字以进行比较 - 这对于该日期格式模型也是有效的,因为年份是数字。
如果您有一个包含更多比较的 DECODE,那么每个搜索表达式和结果值的数据类型都需要匹配,但您在这里只进行一次比较。而 SUM 只能看到 0 或 1。
Question 2: The arguments "1" and "0" are numeric and used in the TO_CHAR function, and which is inside the group function "SUM". How does it execute when the data types in the DECODE clause are different?
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