Oracle 正規表示式例子

2021-07-03 11:43:23 字數 3678 閱讀 5512

-- 查詢value中不是純數字的記錄

select * from fzq ;

select * from fzq where  regexp_like(value,'^[[:digit:]]+$');--以數字開頭,並且匹配多次,直到結尾

select * from fzq where  regexp_like(value,'^[[:digit:]]+');--以數字開頭,並且含有乙個或多個的結果集

-- 查詢value中不包含任何數字的記錄。

select * from fzq where regexp_like(value,'^[^[:digit:]]+$');--以非數字開頭,匹配多次直到結尾

--查詢以12或者1b開頭的記錄.區分大小寫。

select * from fzq where regexp_like(value,'^1[2b]');

--查詢以12或者1b開頭的記錄.不區分大小寫。

select * from fzq where regexp_like(value,'^1[2b]','i');

-- 查詢資料中包含空白的記錄。

select * from fzq where regexp_like(value,'[[:space:]]');

--查詢全是小寫字母或者數字的記錄。

select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');

--查詢任何包含標點符號的記錄。

select * from fzq where regexp_like(value,'[[:punct:]]');

--查詢value中含有以1開頭60結束字串的記錄並且長度是7位

select * from fzq where value like '1____60';

select * from fzq where regexp_like(value,'1....60');

--查詢value中以1開頭60結束的記錄並且長度是7位並且全部是數字的記錄。

select * from fzq where regexp_like(value,'^1[0-9]60$');

--也可以這樣實現,使用字符集。

select * from fzq where regexp_like(value,'^1[[:digit:]]60$');

匹配serv_number欄位全是數字的資料行

1:正規表示式(10g版本新加入的功能)

select * from vgopbme.vgop_dept_wh_20150416 t  where regexp_like(t.serv_number ,'^[0-9]+$');

select * from vgopbme.vgop_dept_wh_20150416 t  where  regexp_like(t.serv_number ,'^[[:digit:]]+$');

2:通過ascii碼判斷是否數字,介於[48, 57]之間,(ascii('0') = 48, ascii('9') = '57')

--通過ascii碼判斷是否數字,介於[48, 57]之間,(ascii('0') = 48, ascii('9') = '57')

declare

str             varchar2(10) := '123a';

val             numeric(10);

i               int;

k               int;

flag            boolean;

begin

flag := true;

for i in 1..10 loop   --新密碼是否6位數字

k := ascii(substr(str, i, 1));

if k < 48 or k > 57 then

flag := false;

end if;

end loop;

if flag = true then

dbms_output.put_line(str || '是[0-9]的數字序列');

else

dbms_output.put_line(str || '不是[0-9]的數字序列');

end if;

end;

3:呼叫cast函式嘗試強制轉換成numeric或number,不是合法數字串即拋異常

declare

str    varchar2(10) := '123';

val    numeric(10);

begin

val := cast(str as numeric);

dbms_output.put_line(str || '是[0-9]的數字序列');

exception

when value_error then -- 字串轉實數錯誤

--dbms_output.put_line(sqlcode || ', ' || sqlerrm);

dbms_output.put_line(str || '不是[0-9]的數字序列');

end;

4:呼叫translate函式,剔除所有[0-9]數字後,看是否為空串

declare

str varchar2(10) := '123abc';

begin

if replace(translate(str, '0123456789', '0'), '0', '') is null then

dbms_output.put_line(str || '是[0-9]的數字序列');

else

dbms_output.put_line(str || '不是[0-9]的數字序列');

end if;

end;

translate是replace所提供的功能的乙個超集。

一、語法: 

translate(string,from_str,to_str) 

二、目的 

將(所有出現的)from_str中的每個字元替換為to_str中的相應字元。

如果from_str比to_str長,那麼在from_string的後邊超出的部分都被替換為空值,因為它們沒有相應的替換字元。

to_str不能為空。oracle將空字串解釋為null,並且如果translate中的任何引數為null,那麼結果也是null .

select translate('abcdefghij','abcdef','123456')   from   dual;    

translate   (    

--------------    

123456ghij    

select translate('護照01浙江2 3昆 山4蘇 3', '0123456789','a') from dual;--護照a浙江 昆 山蘇

--將0替換為a,並且將1-9刪除;

select translate('護照01浙江2 3昆 山4蘇 3', '0123456789','ab') from dual;--護照ab浙江 昆 山蘇

--將0替換為a,1替換為b,將2-9刪除;

select translate('護照01浙江2 3昆 山4蘇 3', '2301456789','ab') from dual;--護照浙江a b昆 山蘇 b

--將2替換為a,3替換為b,剔除01456789;

正規表示式例子

前言 regular expressions 正規表示式,以下用re稱呼 對小弟來說一直都是神密的地帶,看到一些網路上的大大,簡單用re就決解了某些文字的問題,小弟便興起了學一學re的想法,但小弟天生就比較懶一些,總希望看有沒有些快速學習的方式,於是小弟又請出google大神,借由祂的神力,小弟在網...

正規表示式例子

include regex.hpp include include include include inttest regex match d d d fixed telephone std regex re pattern std vector str std regex match 判斷乙個正規...

正規表示式 例子學習

正規表示式是乙個程式設計的藝術,很難除錯,學習和理解,但強大的功能,仍吸引不少開發者編寫正規表示式。讓我們探索一下下面10個實際應用中的正規表示式。1.使用者名稱正規表示式模式 a z0 9 行開始 a z0 9 匹配列表中的字元,a z,0 9,下劃線,連字元 長度至少3個字元,最大長度為15 行...