字符數據清洗是數據治理基礎工程。本文匯總 Oracle 四大高頻字符處理場景:去除尾部空格、頭部填充與截取、大小寫三級標準化、業務語義替換,附函數組合進階用法。
-- 預設去除左右空格
TRIM(' DT001 ') -- 'DT001'
LTRIM(' DT001') -- 'DT001'(左側)
RTRIM('DT001 ') -- 'DT001'(右側)
-- 指定字符集
LTRIM('xyDT001xy', 'xy') -- 'DT001xy'(遇非 x/y 停止)
應用層未修剪導致 'DT001 ' 與 'DT001' 不匹配。ETL 階段統一 RTRIM(prod_code) 或視圖層 CREATE VIEW v_prod AS SELECT RTRIM(prod_code) AS prod_code ...。
-- 填充至指定長度
RPAD('DT001', 6, 'F') -- 'DT001F'(右側填充 F)
LPAD('001', 5, '0') -- '00001'(左側補零)
-- 截取:源長度 > 目標長度時從右/左截取
RPAD('PSD001', 1) -- 'P'(取首字符,右側截取)
LPAD('PSD001', 3) -- 'PSD'(取前 3 字符)
B、客供品加 C、輔料加 F → RPAD(prod_code, 6, type_flag) + WHERE 條件分類更新RPAD(prod_code, 1) 直接提取類別碼,簡化報表邏輯
UPPER('abc DEF') -- 'ABC DEF'(全大寫)
LOWER('ABC def') -- 'abc def'(全小寫)
INITCAP('hello world') -- 'Hello World'(每詞首字母大寫,分隔符:空格/標點/控制字符)
UPDATE prod SET prod_code = UPPER(prod_code)INITCAP(address)WHERE LOWER(prod_code) != UPPER(prod_code) 精準定位需修正行
-- 基礎替換
REPLACE('下沙市某某鋼鐵廠', '下沙市', '下沙區') -- '下沙區某某鋼鐵廠'
REPLACE(addr, '下沙市', '下沙區') -- 僅影響目標片段,不波及 '杭州市'
-- 巢狀組合:截取編碼前綴 → 語義替換
REPLACE(RPAD(prod_code, 2), 'ZD', '自動工具') -- 'P自動工具'
REPLACE(LPAD(prod_code, 3), 'SD', '手動工具') -- '手動工具001'
REPLACE 參數均可為函數/表達式,構建「提取 → 映射 → 替換」管道,實現報表友好顯示。