回覆列表
  • 1 # 使用者2471802296035

    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

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

  • 中秋節和大豐收的關聯?
  • 追求“完全自由”的人,有多自私、多不負責任,是懦弱還是豁達?