當前位置:首頁 » 編程語言 » sqlregexpsubstr
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqlregexpsubstr

發布時間: 2023-05-12 10:08:12

『壹』 Oracle sql從含數字的字元串中,截取出非數字字元

這個只能祭出強大的正則表達式了,字元的正a-z A-Z ,篩選的正則表達式為regexp_substr(欄位,'.*[a-zA-z]')

『貳』 oracle SQL 正則表達式

正則表達式已經在很多軟體中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統,PHP,C#,Java等開發環境。
本文主要介紹了關於Oracle中正則表達式的使用方法,下面話不多說了,來一起看看詳細的介紹。
Oracle使用正則表達式離不開這4個函數:regexp_like、regexp_substr、regexp_instr、regexp_replace。
1、regexp_like
該函數只能用於條件表達式,和 like 類似,但是使用的正則表達式進行匹配
2、regexp_substr
該函數和 substr 類似,用於拾取合符正則表達式描述的字元子串
3、regexp_instr
該函數和 instr 類似,用於標定符合正則表達式的字元子串的開始位置
4、regexp_replace
該函數和 replace 類似,用於替換符合正則表達式的字元串

『叄』 sql一行拆分多行記錄

看個例子 改改再用 應該沒問題
QL> select * from t00;

ID ACHAR
---------- ----------
1 ab,ac,ad
1 cc,cf
2 bb,bc,be

SQL> select * from (select id,regexp_substr(achar,'[^,]+',1,level) achar from t00 connect by level<=length(achar)-length(regexp_replace(achar,',',''))+1) group by id,achar order by id ;

ID ACHAR
---------- --------------------
1 ab
1 ac
1 ad
1 cc
1 cf
2 bb
2 bc
2 be

已選擇8行。

『肆』 如何在SQL Server中使用正則表達式

sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數。
1、regexp_like:
regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:
'c' 說明在進行匹配時區分大小寫(預設值);
'i' 說明在進行匹配時不區分大小寫;
'n' (.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行、
'm' 字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置、
示虛飢例:

1

select * from emp where regexp_like(ename,'^a[a-z]*n$');

可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認察譽逗是區敗賣分大小寫.如果是

1

select * from emp where regexp_like(ename,'^a[a-z]*n$','i')

則可以查找ename為Arwen的行記錄。
2、regexp_instr:
REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數 INSTR(),參數相關:
'start' 開始查找的位置;
'occurrence' 說明應該返回第幾次出現pattern的位置;
'return_option' 說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後 的字元的位置;
'match_option' 修改默認的匹配設置.與regexp_like裡面的相同.
示例:

1
2
3
4
5
6
7

DECLARE
V_RESULT INTEGER ;
BEGIN
SELECT REGEXP_INSTR('hello world','o',1,1,0) INTO V_RESULT
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;

結果為5,即字母o第一個次出現的位置。
如果regexp_instr('hello world','o',1,1,n)其中n為除0之外的整數。比如1,3。則結果為6.表示第一次出現字母o的後面一個字元的位置。
如果regexp_instr('hello world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.
3、regexp_replace:
REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數 REPLACE(),參數同REGEXP_INSTR函數
示例:

1
2
3
4
5
6
7

DECLARE
V_RESULT varchar2(90);
BEGIN
SELECT REGEXP_REPLACE('hello world','o','x',1,1) INTO V_RESULT
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END;

結果為hellx world.
如果REGEXP_REPLACE('hello world','o','x'),則結果為hellx wxrld.
如果 REGEXP_REPLACE('hello world','o','x',1,2)則結果為hello wxrld.
4、regexp_substr:
REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用於在x中查找pattern並返回。可以參考字元串函數 SUBSTR(),參數同REGEXP_INSTR函數.
例如:

1
2
3
4
5
6
7

DECLARE
V_RESULT VARCHAR2(255);
BEGIN
SELECT REGEXP_SUBSTR('hello world','l{2}') INTO V_RESULT
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END ;

結果為ll
查詢到匹配的字元串才返回匹配的字元.沒查到就返回空。

『伍』 sql語句在一個欄位中提取數字

select regexp_substr('水庫新村332號','[0-9]+' ) from al;--用正則表達式取出數字
select regexp_substr('水庫新村332號','[[:digit:]]+') from al;

『陸』 sql語句regexp_substr(building_name,'[0-9]+[號樓|號|棟|#|座]')里的[號樓|號|棟|#|座]是什麼意思

"|"符號在正則表式里是 「或者」 的意思。

regexp_substr(building_name,'[0-9]+[號樓|號|棟|#|座]')

這句正則表乎坦達的是,在歲友桐building_name里找一位數如果後面是「號樓」告帆或者「號」或者「棟」再或者「#」還或者「座」都數找到並匹配成功。。