簡體   English   中英

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”功能一起使用。

  1. 本示例中使用的TO_CHAR函數將日期數據類型轉換為字符數據類型,並將這些值與搜索值進行比較(1995、1996等),然后計算結果。
  2. 但是,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM