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
留言列表