ORACLE 常用字符函數
1 ASCII(arg1)
返回參數arg1的十進制數字表示.如果數據庫設置為ASCII,則采用的是ASCII碼字符.如果設置為EBCDIC,則采用的是EBCDIC字符
select ascii('A') from dual;
ASCII('A')
----------
65
2 CHR(arg1,[using nchar_cs])
返回由參數arg1的代碼所指定的字符.所返回的字符依賴於oracle所使用的底層字符編碼設置.
select chr(65) from dual;
CHR(65)
-------
A
3 CONCAT(arg1,arg2)
返回arg1與arg2的拼接結果.等同於arg1||arg2
select concat('ABC','DEF') from dual;
CONCAT('ABC','DEF')
-------------------
ABCDEF
4 INITCAP(arg1)
將參數arg1轉換為每個單詞的首字母大寫的格式.
select INITCAP('hello world') from dual;
INITCAP('HELLOWORLD')
---------------------
Hello World
5 INSTR(arg1,to_find,pos,occurrence)
在arg1中查找to_find子字符串,並返回一個整數表示它出現的位置.參數pos指定在參數arg1中開始搜索的位置.如果pos為正,則在該數字指定的位置開始搜索.如果pos為負,則在該數字指定的位置開始搜索,但位置指定是從字符串結尾處開始的.並且反向搜索.參數occurrence指定搜索第幾次出現的了字符串.
--從左面第1個字符開始搜索,第一次出現ABC的位置
select instr('HABCHABC','ABC',1,1) from dual;
INSTR('HABCHABC','ABC',1,1)
---------------------------
2
--從左面第3個字符開始搜索,第一次出現ABC的位置
select instr('HABCHABC','ABC',3,1) from dual;
INSTR('HABCHABC','ABC',3,1)
---------------------------
6
----從左面第1個字符開始搜索,第二次出現ABC的位置
select instr('HABCHABC','ABC',1,2) from dual;
INSTR('HABCHABC','ABC',1,2)
---------------------------
6
--從右面第1個字符開始搜索,第二次出現ABC的位置
select instr('HABCHABC','ABC',-1,2) from dual;
INSTR('HABCHABC','ABC',-1,2)
----------------------------
2
6 LENGTH(arg1)
返回參數arg1的長度.arg1可以是char,varchar2,nchar,nvarchar2,clob或nclob
select length('abcdefg') from dual;
LENGTH('ABCDEFG')
-----------------
7
7 lower(arg1)
返回參數arg1的小寫形式.
select lower('AbCdEfG') from dual;
LOWER('ABCDEFG')
----------------
Abcdefg
8 LPAD(arg1,n,arg3)
返回在arg1左邊填充若干個arg3組成長度為n新字符串.如果n小於arg1的長度,則變為 將arg1從左側截取N字符.
--在ABC前面連續添加Ha直到總長度為10
select lpad('ABC',10,'Ha') from dual;
LPAD('ABC',10,'HA')
-------------------
HaHaHaHABC
select lpad('ABC',2,'Ha') from dual;
LPAD('ABC',2,'HA')
------------------
AB
9 LTRIM(arg1,arg2)
在arg1左面刪除連續出現的arg2.不指定arg2則默認刪除空格.
select ltrim('AAAASA','A') from dual;
LTRIM('AAAASA','A')
-------------------
SA
select ltrim(' AAA') from dual;
LTRIM('AAA')
------------
AAA
10 NLS_INITCAP(arg1,[‘NLS_SORT=x’])
功能與INITCAP相同,只是可以處理多字符編碼的字符.
11 NLS_LOWER(arg1,[‘NLS_SORT=x’])
功能與LOWER相同, 只是可以處理多字符編碼的字符.
12 NLSSORT(arg1,[‘NLS_SORT=x’])
允許根據數據庫所使用的語言的特定語言要求,對結果進行排序.
13 NSL_UPPER(arg1,[‘NLS_SORT=x’])
與upper功能相同,但是可以處理多字節編碼的字符.
14 REGEXP_INSTR(source,regex,[pos],[occurrence],[return_option],[match])
REGEXP_INSTR是一個高版本的INSTR函數. REGEXP_INSTR允許使用與POSIX兼容的正則表達式(POSIX表示可移植的UNIX操作系統接口)搜索字符串.該函數返回一個表示在匹配字符串中位置的整數.如果參數source為LOB類型,則該函數返回一個CLOB.
各參數的說明:
Source---要搜索的源字符串
Regex----所使用的與POSIX兼容的正則表達式.
Pos(可選的)-----描述在字符串中開始搜索的位置的整數.默認值為1,表示從字符串第1個字符開始搜索.
Occurrence(可選的)-----描述執行多少次替換的整數.默認值為0.
Return_options(可選的)----描述匹配字符串的位置的整數.默認值為0,表示讓oracle返回匹配字符串的首字母的位置.也可以指定1,讓oracel返回匹配字符串之后第1個字母的位置.
Match(可選的)----允許修改正則表達式引擎的默認行為的字符串.有效的字符串是i表示非大小寫敏感的匹配;c,表示大小寫敏感的匹配;n,它允許句號(.)運算符與換行符匹配;以及m,它將源字符串當作多行處理.
select REGEXP_INSTR('ABC123ABC','[0-9]A') from dual;
REGEXP_INSTR('ABC123ABC','[0-9
------------------------------
6
15 REGEXP_REPLACE(source,regex,replace,[pos],[occurrence],[match])
REGEXP_REPLACE是replace函數的一個高版本. REGEXP_REPLACE允許使用與POSIX兼容的正則表達式搜索源字符串.該函數返回一個varchar2類型的字符串,其中每個匹配的regex被replace參數替換.如果source參數為CLOB類型,則該函數返回CLOB類型.
參數source和replace可以是char,varchar2,nchar,nvarchar2,clob或nclob數據類型,而參數regex可以是char,varchar2,nchar或可包含多達512字節的數據的nvarchar2數據類型.只有oracle10g 才提供該函數
該函數包含以下參數:
Source ----要搜索的源字符串
Regex----所使用的與posix兼容的正則表達式
Replace----當正則表達式匹配時所使用的替換字符串
Pos(可選的)----描述在字符串中開始搜索的位置的整數.默認值為1,表示從字符串第一個字符開始搜索.
Occurrence(可選的)----描述執行多少次替換的數據.默認為0,表示執行所有匹配的替換.
Match(可選的)---- 允許修改正則表達式引擎的默認行為的字符串.有效的字符串是i表示非大小寫敏感的匹配;c,表示大小寫敏感的匹配;n,它允許句號(.)運算符與換行符匹配;以及m,它將源字符串當作多行處理.
select REGEXP_REPLACE('abc123abc123','[0-9]','#') from dual;
REGEXP_REPLACE('ABC123ABC123',
------------------------------
abc###abc###
16 EGEXP_SUBSTR(source,regex,[pos],[occurrence],[match])
REGEXP_SUBSTR是substr 函數的一個高版本. REGEXP_SUBSTR允許使用與posix兼容的正則表達式搜索源字符串.
該函數包含以下參數:
Source ----要搜索的源字符串
Regex----所使用的與posix兼容的正則表達式
Pos(可選的)----描述在字符串中開始搜索的位置的整數.默認值為1,表示從字符串第一個字符開始搜索.
Occurrence(可選的)----描述執行多少次替換的數據.默認為0,表示執行所有匹配的替換.
Match(可選的)---- 允許修改正則表達式引擎的默認行為的字符串.有效的字符串是i表示非大小寫敏感的匹配;c,表示大小寫敏感的匹配;n,它允許句號(.)運算符與換行符匹配;以及m,它將源字符串當作多行處理.
select REGEXP_substr('abc133abc456','([0-9]{3})abc([0-9]{3})') from dual;
REGEXP_SUBSTR('ABC133ABC456','
------------------------------
133abc456
17 REPLACE(arg1,search,replace)
該函數用replace 參數替換出現的所有search參數.
select replace('abcdabce','abc','x') from dual;
REPLACE('ABCDABCE','ABC','X')
-----------------------------
Xdxe
18 RPAD(arg1,n,arg3)
在字符串arg1右邊連續重復填充arg3直到填充后的字符串總長度到達n為止.
select rpad('thr',5,'ee') from dual;
RPAD('THR',5,'EE')
------------------
Three
如果n的值小於arg1的長度,則從右面截取,相當於substr ()函數進行截取
select rpad('hello',2,'xxx') as rpad,substr('hello',1,2) as substr from dual;
RPAD SUBSTR
---- ------
he he
19 RTRIM(arg1,arg2)
從arg1中刪除右側連續出現的arg2.不指定arg2則默認刪除空格.
select rtrim('abcdabcabc','abc') from dual;
RTRIM('ABCDABCABC','ABC')
-------------------------
Abcd
select rtrim('six space ')||';' from dual;
RTRIM('SIXSPACE')||';'
----------------------
six space;
20 SOUNDEX(arg1)
返回arg1的語音學表示.通常用於在某個表中執行搜索,以便查找那些相互之間發音相同但拼寫不同的單詞.
select soundex('too'),soundex('two') from dual;
SOUNDEX('TOO') SOUNDEX('TWO')
-------------- --------------
T000 T000
21.SUBSTR(arg1,pos.len)
從arg1中指定的位置pos開始向右側截取指定長度len的子字符串.如果pos為正則從字符串arg1左側開始計數,如果為負則從字符串右側開始計數.
如果未指定len,則返回至該字符串從位置pos開始到串尾的子串.
SQL> --從左側第3位開始向后截取5個字符.
SQL> select substr('1234567890',3,5) from dual;
SUBSTR('1234567890',3,5)
------------------------
34567
--從右側第3位開始向后截取5個字符.
SQL> select substr('1234567890',-3,5) from dual;
SUBSTR('1234567890',-3,5)
-------------------------
890
--從左側第3位開始向后截取到字符串尾.
select substr('1234567890',3) from dual;
SUBSTR('1234567890',3)
----------------------
34567890
22 TRANSLATE(arg1,match,replace)
類似於replace函數.差別在於,translate允許一次執行多個字符替換(但只是單個字符的替換).
--將*R替換成#@
select replace('PI*R*2','*R','#@') from dual;
REPLACE('PI*R*2','*R','#')
--------------------------
PI#*2
--將*替換成#,同時R替換成@
select TRANSLATE('PI*R*2','*R','#@') from dual;
TRANSLATE('PI*R*2','*R','#@')
-----------------------------
PI#@#2
23 TREAT(expr as [REF] schema.type)
允許改變expr參數的聲明類型.當擁有一種更適合於數據的子類型,並且希望轉換為該父類型為更適合的子類型時,該函數可謂得心應手.如果將要引用的REF類型,此時才會使用到可選的REF關鍵字.
這個函數是從書上抄下來的,暫時沒有研究是什么意思,以后再補上。
24 TRIM([LEADING][TRAILING][BOTH] char FROM source)
Trim返回varchar2 類型的字符串,其中前導的、尾隨的字符char被從source中剪裁。如果指定leading 則與char匹配的前導字符被剪裁。如果指定trailing,則與char匹配的尾隨字符被剪裁。指定both,則字符串的首尾都被剪裁。如果沒有給出char則默認為空白。如果只指定source參數,則將從source參數中刪除尾隨和前導的空白。
--截斷串首連續出現的字符1
SELECT TRIM(LEADING '1' FROM '1122332211') FROM DUAL;
TRIM(LEADING'1'FROM'1122332211
------------------------------
22332211
--截斷串尾連續出現的字符1
SELECT TRIM(TRAILING '1' FROM '1122332211') FROM DUAL;
TRIM(TRAILING'1'FROM'112233221
------------------------------
11223322
--截斷串首和串尾連續出現的字符1
SELECT TRIM(BOTH '1' FROM '1122332211') FROM DUAL;
TRIM(BOTH'1'FROM'1122332211')
-----------------------------
223322
--不指定[LEADING][TRAILING][BOTH]則默認為BOTH
SELECT TRIM('1' FROM '1122332211') FROM DUAL;
TRIM('1'FROM'1122332211')
-------------------------
223322
--只指定參數source則默認為TRIM(BOTH ' ' from source)
SELECT TRIM(BOTH ' ' from ' ! ') as BOTH,TRIM(' ! ') as source FROM DUAL;
BOTH SOURCE
---- ------
! !