Oracle SQL - 部門代碼及應用(搜尋子部門)

部門編碼需依照固定的編碼原則來命名,而且建議由數字組成,
日後於些資料處理上較方便。

舉例來說:

 製造部:1101000
 └ 製造課A:1101100
  └ 製造課B:1101200
 
我們要怎麼取得製造部底下的所有部門?
1. 先將部門編碼中,右芳的0全部去除,例如:1101000 > 1101
2. 透過Like的語法來搜尋部門代碼,ID Like '1101%',這樣就代表要抓出所有1101開頭的部門
3. 可以透過該邏輯,抓取含子部門的所有明細

測試語法:

SELECT
 A.*, RTRIM(ID,0)
FROM
(
    SELECT '1101000' ID,'製造部' NAME FROM DUAL
    UNION ALL
    SELECT '1101100' ID,'製造課A' NAME FROM DUAL
    UNION ALL
    SELECT '1101200' ID,'製造課B' NAME FROM DUAL
    UNION ALL
    SELECT '1102000' ID,'管理部' NAME FROM DUAL
) A
WHERE
    ID LIKE CONCAT(RTRIM(1101000,0),'%') --取得製造部的所有子部門
    --ID LIKE CONCAT(RTRIM(1101100,0),'%') --取得製造課A的所有子部門

 


語法說明:
TRIM (RTRIM、LTRIM):去除前後的指定的文字
LPAD、RPAD:於文字前後新增固定的文字

兩個功能剛好一正一反,可以互相搭配使用。

 


 

參考文章:
Oracle PL/SQL: 字串的 TRIM 前後截碼
http://tomkuo139.blogspot.tw/2009/01/plsql-trim.html

Oracle PL/SQL: 字串前後填入 N 個字元
http://tomkuo139.blogspot.tw/2008/12/plsql-n.html

 

arrow
arrow
    全站熱搜

    Nathan 發表在 痞客邦 留言(0) 人氣()