首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 常用單行字符串函數完整參考指南

     編輯:Oracle 資料庫基礎

字符串函數分類速查表

函數功能典型用法備註
ASCII(c)返回首字符 ASCII 碼ASCII('A')=65逆函數 CHR(n)
CHR(n)十進制轉字符CHR(65)='A'支援 NCHAR
CONCAT(s1,s2)拼接字符串CONCAT('a','b')='ab'等同 s1||s2,自動處理 NULL
INITCAP(s)單詞首字母大寫INITCAP('hello world')='Hello World'分隔符:空格/標點/控制字符
INSTR(s1,s2[,pos[,occ]])查找子串位置INSTR('mississippi','i',3,3)=11pos 負數從右向左搜,位置仍從左計
INSTRB按字節查找多字節字符集下與 INSTR 差異單字節集等同 INSTR
LENGTH(s)字符長度LENGTH('ipso facto')=10NULL 返回 NULL
LENGTHB字節長度多字節集下實際存儲字節數
LOWER/UPPER大小寫轉換WHERE UPPER(name) LIKE 'KI%'常用於 WHERE 條件規範化
LPAD(s, n[,pad])左填充到長度 nLPAD('yes',7,'*')='****yes'pad 默認空格;n<原長則截斷
RPAD(s, n[,pad])右填充RPAD('no',5,'-')='no---'同 LPAD
LTRIM(s[,set])去除左側指定字符集LTRIM('mississippi','mis')='ppi'非單字符,而是字符集合
RTRIM(s[,set])去除右側指定字符集RTRIM('abcxyz','xyz')='abc'同 LTRIM
REPLACE(s, old[,new])替換子串REPLACE('uptown','up','down')='downtown'new 省略則刪除 old
SUBSTR(s, pos[,len])截取子串SUBSTR('message',1,4)='mess'pos 負數從末尾倒數
SUBSTRB按字節截取多字節集下精確截取
SOUNDEX(s)發音相似編碼SOUNDEX('Dawes')='D200'模糊匹配姓名/地址
TRANSLATE(s, from, to)字符級映射替換TRANSLATE('fumble','uf','ar')='ramble'一對一映射,非子串替換
TRIM([BOTH|LEADING|TRAILING] c FROM s)修剪首尾字符TRIM(' hello ')='hello'默認修剪空格,可指定字符

實戰避坑指南

  • NULL 傳播:除 CONCAT 外,任一參數為 NULL 多數函數返回 NULL,注意 NVL 兜底。
  • 字符語義 vs 字節語義:多字節字符集(AL32UTF8)下,LENGTH/SUBSTR 按字符,LENGTHB/SUBSTRB 按字節,混用易截斷亂碼。
  • LTRIM/RTRIM 字符集陷阱:LTRIM('abc','ab') 會去除所有 a 和 b 而非前綴 ab,需配合 REGEXP_LIKE 處理前綴刪除。
  • SOUNDEX 仅支援英文,中文拼音匹配需自定義函數或 Oracle Text。
  • TRANSLATE vs REPLACE:前者單字符映射(長度固定),後者子串替換(長度可變),勿混淆。

性能建議

  1. 大量字符串操作改用 **PL/SQL 批量處理**(FORALL + 集合)減少上下文切換。
  2. WHERE 條件中的 UPPER/LOWER 導致索引失效,改建 **函數索引**:CREATE INDEX idx_upper_name ON t(UPPER(name))。
  3. 避免在 SQL 循環調用 SUBSTR/INSTR,單條 SQL 完成邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved