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" 字串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字串最後的位置、
示例:
select * from emp where regexp_like(ename,"^a[a-z]*n$");
可以查詢ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為預設是區分大小寫.如果是
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裡面的相同.
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函式
V_RESULT varchar2(90);
SELECT REGEXP_REPLACE("hello world","o","x",1,1) INTO V_RESULT
結果為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函式.
例如:
V_RESULT VARCHAR2(255);
SELECT REGEXP_SUBSTR("hello world","l{2}") INTO V_RESULT
END ;
結果為ll
查詢到匹配的字串才返回匹配的字元.沒查到就返回空。
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" 字串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字串最後的位置、
示例:
select * from emp where regexp_like(ename,"^a[a-z]*n$");
可以查詢ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為預設是區分大小寫.如果是
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裡面的相同.
示例:
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函式
示例:
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函式.
例如:
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
查詢到匹配的字串才返回匹配的字元.沒查到就返回空。