在 Oracle 資料庫開發中,字元函數是處理字串資料的基石。本文系統整理了 Oracle 中最常用的字元型函數,涵蓋 ASCII 轉換、字串連接、大小寫控制、長度計算、子字串搜尋等核心功能,並附上詳細的參數說明與實戰 SQL 範例,助你快速掌握字串操作技巧。
功能:回傳字串最左側字元的 ASCII 碼值(數值型)。
參數:x1 為字元運算式。
範例:
SELECT ascii('A') AS A, ascii('a') AS a, ascii(' ') AS space, ascii('示') AS hz FROM dual;
-- 結果:65, 97, 32, 51902
注意:純數字字串可不加引號,含其他字元必須用單引號括起;若最左側為漢字,僅取其左半部字元的 ASCII 碼。互反函數為 CHR()。
功能:將 ASCII 碼轉換為對應字元(字元型)。
參數:n1 為 0~255 的整數。
範例:
SELECT chr(54740) AS zhao, chr(65) AS chr65 FROM dual;
-- 結果:趙, A
功能:連接兩個字串,等同於 c1 || c2。
範例:
SELECT concat('010-','88888888') || '轉23' AS 電話 FROM dual;
-- 結果:010-88888888轉23
| 函數 | 功能 | 範例 |
|---|---|---|
| INITCAP(c1) | 首字母大寫,其餘小寫 | initcap('smith abc aBC') → 'Smith Abc Abc' |
| LOWER(c1) | 全轉小寫 | lower('AaBbCcDd') → 'aabbccdd' |
| UPPER(c1) | 全轉大寫 | upper('AaBbCcDd') → 'AABBCCDD' |
| NLS_INITCAP(x[,y]) | 支援 NLS 參數的首字母大寫 | nls_initcap('a c b d e','nls_sort=SCHINESE_PINYIN_M') |
| NLS_LOWER(x[,y]) | 支援 NLS 參數的全小寫 | 同上,參數 y 可指定排序規則 |
| NLS_UPPER(x[,y]) | 支援 NLS 參數的全大寫 | 同上 |
NLS 參數說明:y 可選,如 nls_sort=SCHINESE_RADICAL_M(部首筆畫)、SCHINESE_STROKE_M(筆畫部首)、SCHINESE_PINYIN_M(拼音)。可透過 SELECT * FROM nls_database_parameters; 查詢資料庫級 NLS 設定。
語法:INSTR(C1, C2[, I[, J]])
差異:
INSTR:多位元組字元(漢字、全形)按 1 個字元計算INSTRB:按位元組計算(通常雙位元組字元算 2)範例:
SELECT instr('oracle traning','ra',1,2) FROM dual; -- 返回 9
SELECT instr('重慶某軟件公司','某',1,1), instrb('重慶某軟件公司','某',1,1) FROM dual; -- 返回 3, 5
| 函數 | 計算單位 | 說明 |
|---|---|---|
| LENGTH(c1) | 字元數 | 依資料庫字元集計算字元個數 |
| LENGTHB(c1) | 位元組數 | 回傳字串佔用的 byte 數 |
| LENGTHC(c1) | Unicode 字元數 | 使用純 Unicode 計算 |
| LENGTH2(c1) | UCS2 字元數 | 使用 UCS2 編碼計算 |
| LENGTH4(c1) | UCS4 字元數 | 使用 UCS4 編碼計算 |
常用對比:
SELECT length('高乾競'), lengthb('高乾競') FROM dual; -- 3, 6
SELECT length('你好'), lengthb('你好'), lengthc('你好'), length2('你好'), length4('你好') FROM dual;
掌握這些函數的細微差異,能讓你在處理多語言、多字元集資料時遊刃有餘。下一篇將進階介紹 SUBSTR、REPLACE、TRIM 等進階字串操作函數。