ORACLE10正規表示式(一)

2021-04-17 18:56:17 字數 1704 閱讀 4538

oracle 8 和oracle 9i中缺乏靈活性的sql 正規表示式最終在oracle 10g中得到了解決。oracle 資料庫目前內建了符合posix 標準的正規表示式。

四個新的函式分別是:regexp_like、regexp_instr、regexp_substr、和 regexp_replace。它們在用法上與oracle sql 函式like、instr、substr 和replace 用法,但是它們使用posix 正規表示式代替了老的百分號(%)和萬用字元(_)字元。

posix 正規表示式由標準的元字元(metacharacters)所構成:

'^' 表示字串的開始

'$' 表示字串的結束

'.' 表示任何字元

字元的範圍,比如說'[a-z]',表示任何ascii 小寫字母,與字元類"[[:lower:]]"" 等價

'?' 允許乙個後繼字元匹配零次或一次

'+' 允許乙個後繼字元匹配一次或多次

'*' 表示零次或多次

可以使用"" 指定乙個精確地出現範圍,其意思是「出現從m 次到n 次」;"" 表示「正好m次」;而"" 表示「至少m次」。還可以使用圓括號組合字元的集合,使用"|"(豎線)表示可替換。例如,字串'^([a-z]+|[0-9]+)$'將匹配所有由小 寫字母或數字組合成的字串。

regexp_like 與like 操作符相似。如果第乙個引數匹配正規表示式它就解析為true。例如where regexp_like(ename,'^j[ao]','i') 將在ename 以ja 或jo 開始的情況下返回一行資料。'i' 引數指定正規表示式是大小寫敏感的。另外還可以在check 約束和函式索引中指定regexp_like。例如:

alter table emp add constraint regex01

check (regexp_like(ename,'^[[:alpha:]]+$'));

這條語句使得ename 字段只能包含字母和數字字元(也就是說沒有空格或者標點符號)。試圖插入或者更新這些資料將導致乙個ora-2290 異常,或者檢查約束的有效性。

regexp_instr 與instr 函式類似。它返回乙個字串中匹配乙個正規表示式的第乙個子串的開始位置。例如:

select regexp_instr('the total is $400 for your purchase.','$[[:digit:]]+')

from dual;

這個查詢返回14,即$400在字串的開始位置。另外還可以指定子串出現的次數;開始搜尋的位置;是返回匹配的位置還是返回匹配之後字元的位置。

regexp_substr 返回匹配乙個正規表示式的子串。雖然結合使用substr 和regexp_instr 及length 也可以實現這一功能,但是使用這個函式卻更為簡單。

select regexp_instr('one,two,three','[^,]*') from dual;

這個查詢返回'one',將第乙個引數看成乙個逗號分隔的列表並返回第乙個逗號之前的所有字元。

regexp_replace 返回初始引數被匹配子串替換之後的結果。例如:

select regexp_replace('the temperature is 23°f',

'([[:digit:]])+°f',

('/1'-32)*5/9||'°c')

from dual;

這個查詢將查詢乙個華氏溫度並將其轉換為攝氏度。它將返回:'the temperature is -5°c'。

ORACLE10正規表示式(二)

oracle10g增加的正規表示式功能!強 oracle資料庫10g將正規表示式引入到sql語句中 oracle資料庫10g將正規表示式引入到sql語句中。正規表示式是一種用於描述和操縱文字資料的功能強大的工具。事實上,正規表示式 於早期的低階unix 工具 如qed和ed 現在它已經變得幾乎無處不...

oracle 正規表示式

with temp as select br.777 1 a from dual union all select bs.6 175 a from dual union all select d.140 supplement 1 a from dual union all select e.191 ...

oracle正規表示式

在資料庫可直接執行下面語句,但在程式中不能執行,regexp like t.ipaddress,25 0 5 2 0 4 0 9 01 0 9 0 9 25 0 5 2 0 4 0 9 01 0 9 0 9 報錯有特殊字元 在句末再加乙個 改為 regexp like t.ipaddress,25 ...