[英]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”功能一起使用。
這里是問題:
問題1: DECODE函數還可以采用具有不同數據類型的值嗎?
例如,如果將年份用作1995、1996而不是'1995','1996',則查詢將成功執行。
問題2:參數“ 1”和“ 0”是數字,在TO_CHAR函數中使用,並且在組函數“ SUM”中。 當DECODE子句中的數據類型不同時,如何執行?
請幫忙。
問題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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.