首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 字符函數完全參考:21 個核心函數語法、返回類型與實戰用法速查

     編輯:Oracle 資料庫相關知識

分類概覽

類別函數返回類型核心用途
返回字符CHRVARCHAR2/CHAR數值轉字符(ASCII 反函數)
CONCATVARCHAR2兩字符串連接(等同 ||)
INITCAPVARCHAR2單詞首字母大寫
LTRIMVARCHAR2左側去除指定字符集
NLS_INITCAPVARCHAR2支援多語言排序的首字母大寫
NLS_LOWERVARCHAR2多語言感知轉小寫
NLS_UPPERVARCHAR2多語言感知轉大寫
REPLACEVARCHAR2子串替換/刪除
RPADVARCHAR2右側填充至指定長度
RTRIMVARCHAR2右側去除指定字符集
SOUNDEXVARCHAR2發音代碼(模糊匹配)
SUBSTRVARCHAR2子串擷取(支援負數從右計)
TRANSLATEVARCHAR2字符級一對一映射/刪除
UPPERVARCHAR2/CHAR簡單轉大寫
返回數字ASCIINUMBER首字符編碼值
INSTRNUMBER子串位置(支援從右/第 N 次)
INSTRBNUMBER字節級位置
LENGTHNUMBER字符長度(CHAR 計尾部空格)
LENGTHBNUMBER字節長度
NLSSORTRAW排序鍵值(語言感知)

高頻函數深度解析

1. SUBSTR 靈活擷取


SUBSTR('HelloWorld', 1, 5)    -- 'Hello'  從左起第1個取5個
SUBSTR('HelloWorld', -5, 3)   -- 'Wor'    從右起第5個取3個
SUBSTR('HelloWorld', -5)      -- 'World'  從右起第5個取到結尾

陷阱:LENGTH 計算 CHAR 型別尾部空格,LENGTHB 單字節集下與 LENGTH 相同,多字節集下不同。

2. INSTR 精準定位


INSTR('abcabc', 'ab', 1, 2)   -- 4  從左起第2次出現位置
INSTR('abcabc', 'ab', -1, 1)  -- 4  從右起搜尋,返回相對字符串開頭的位置

3. REPLACE vs TRANSLATE

場景推薦原因
整詞替換 'abc'→'xyz'REPLACE語意清晰,支援刪除(第三參數為 NULL)
字符集映射 'abc'→'123'TRANSLATE逐字符映射,from_str > to_str 時自動刪除多餘字符
移除所有標點TRANSLATE(str, '!"#$%', '')單次調用完成多字符刪除

4. NLS 系列:多語言環境必備


-- 德語排序中 ß 視為 ss
NLS_UPPER('straße', 'NLS_SORT=XGERMAN')  -- 'STRASSE'

-- 傳統 UPPER 無法處理
UPPER('straße')  -- 'STRASSE' (12c+ 已改進,舊版本失效)

參數 nlsparams 格式:'NLS_SORT=sort_name' 或 'NLS_LANGUAGE=language'。

5. SOUNDEX:英文發音模糊查詢


SELECT * FROM employees
WHERE SOUNDEX(last_name) = SOUNDEX('Smith');  -- 匹配 Smyth, Smithe 等

長度限制與資料類型陷阱

類型最大長度備註
VARCHAR24000 位元組 (12c MAX_STRING_SIZE=EXTENDED 可至 32767)PL/SQL 中可 32767
CHAR2000 位元組固定長度,右補空格
CLOB4GB大文本首選

最佳實踐:所有字符操作優先用 VARCHAR2,超長文本改用 DBMS_LOB 套件處理。

實戰組合拳範例


-- 1. 手機號碼脫敏:中間4位替換為****
SELECT REPLACE(phone, SUBSTR(phone, 4, 4), '****') FROM customers;

-- 2. 字符串分裂為行(11g REGEXP_SUBSTR + CONNECT BY)
SELECT REGEXP_SUBSTR('a,b,c,d', '[^,]+', 1, LEVEL) AS token
FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT('a,b,c,d', ',') + 1;

-- 3. 首尾去空格 + 多空格合一
SELECT REGEXP_REPLACE(TRIM(col), '\s+', ' ') FROM t;

-- 4. 獲取文件擴展名
SELECT SUBSTR(filename, INSTR(filename, '.', -1) + 1) FROM files;

總結

熟練掌握這 21 個字符函數,配合正則表達式(REGEXP_* 系列),可解決 95% 以上的文本處理需求。記住:多語言環境優先用 NLS_* 系列,字符級映射用 TRANSLATE,詞級替換用 REPLACE,擷取定位用 SUBSTR/INSTR 組合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved