zoukankan      html  css  js  c++  java
  • Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace

    Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace
     
    --去掉所有特殊字符,只剩字母
     SELECT REGEXP_REPLACE('(Sam-Tomats123-=,.231+)','[^[:alpha:]]','') FROM dual; 
     
    Sql代码  
    Oracle使用正则表达式离不开这4个函数:  
      
    1。regexp_like  
      
    2。regexp_substr  
      
    3。regexp_instr  
      
    4。regexp_replace  
    www.2cto.com  
    看函数名称大概就能猜到有什么用了。  
      
    regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,语法很简单:  
     
    regexp_substr 函数,和 substr 类似,用于拾取合符正则表达式描述的字符子串,语法如下: 
     
    regexp_instr 函数,和 instr 类似,用于标定符合正则表达式的字符子串的开始位置,语法如下:  
     
    regexp_replace 函数,和 replace 类似,用于替换符合正则表达式的字符串,语法如下:  
     
    这里解析一下几个参数的含义:  
      
    1。source_char,输入的字符串,可以是列名或者字符串常量、变量。  
      
    2。pattern,正则表达式。  
      
    3。match_parameter,匹配选项。  
      
    取值范围: i:大小写不敏感; c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;x:扩展模式,忽略正则表达式中的空白字符。  
      
    4。position,标识从第几个字符开始正则表达式匹配。  
    5。occurrence,标识第几个匹配组。  
    6。replace_string,替换的字符串。  
    Sql代码  
     oracle 10g正则表达式 REGEXP_LIKE 用法  
    /*  
    ORACLE中的支持正则表达式的函数主要有下面四个:  
    1,REGEXP_LIKE :与LIKE的功能相似  
    2,REGEXP_INSTR :与INSTR的功能相似  
    3,REGEXP_SUBSTR :与SUBSTR的功能相似  
    4,REGEXP_REPLACE :与REPLACE的功能相似  
     
    它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,  
    但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。  
    POSIX 正则表达式由标准的元字符(metacharacters)所构成:  
    '^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。  
    '$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹  
    配 ' ' 或 ' '。  
    '.' 匹配除换行符之外的任何单字符。  
    '?' 匹配前面的子表达式零次或一次。  
    '+' 匹配前面的子表达式一次或多次。  
    '*' 匹配前面的子表达式零次或多次。  
    '|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的  
    字符串。  
     
    '( )' 标记一个子表达式的开始和结束位置。  
    '[]' 标记一个中括号表达式。  
    '{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少  
    出现m次。  
    um 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。  
    字符簇:   
    [[:alpha:]] 任何字母。  
    [[:digit:]] 任何数字。  
    [[:alnum:]] 任何字母和数字。  
    [[:space:]] 任何白字符。  
    [[:upper:]] 任何大写字母。  
    [[:lower:]] 任何小写字母。  
    [[:punct:]] 任何标点符号。  
    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。  
    各种操作符的运算优先级  
    转义符  
    (), (?:), (?=), [] 圆括号和方括号  
    *, +, ?, {n}, {n,}, {n,m} 限定符  
    ^, $, anymetacharacter 位置和顺序  
    |   
    */  
       www.2cto.com  
    Sql代码  
    tbs@TICKET> create table fzq  
      2  (  
      3  id varchar(4),  
      4  value varchar(10)  
      5  );  
      
    表已创建。  
      
    tbs@TICKET> --数据插入  
    tbs@TICKET> insert into fzq values  
      2  ('1','1234560');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('2','1234560');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('3','1b3b560');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('4','abc');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('5','abcde');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('6','ADREasx');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('7','123 45');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('8','adc de');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('9','adc,.de');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('10','1B');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('10','abcbvbnb');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('11','11114560');  
      
    已创建 1 行。  
      
    tbs@TICKET> insert into fzq values  
      2  ('11','11124560');  
      
    已创建 1 行。  
      
    tbs@TICKET> commit;  
      
    提交完成。  
      
    tbs@TICKET> select * from fzq where value like '1____60';  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    3    1b3b560  
      
    tbs@TICKET> select * from fzq where regexp_like(value,'1....60');  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    3    1b3b560  
    11   11114560  
    11   11124560  
      
    tbs@TICKET> select * from fzq where regexp_like(value,'1[0-9]{4}60');  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    11   11114560  
    11   11124560  
      
    tbs@TICKET> select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    11   11114560  
    11   11124560  
      
    tbs@TICKET> select * from fzq where not regexp_like(value,'^[[:digit:]]+$');  
      
    ID   VALUE  
    ---- ----------  
    3    1b3b560  
    4    abc  
    5    abcde  
    6    ADREasx  
    7    123 45  
    8    adc de  
    9    adc,.de  
    10   1B  
    10   abcbvbnb  
      
    已选择9行。  
      
    tbs@TICKET> -- 查询value中不是纯数字的记录  
    tbs@TICKET> select * from fzq where not regexp_like(value,'^[[:digit:]]+$');  
      
    ID   VALUE  
    ---- ----------  
    3    1b3b560  
    4    abc  
    5    abcde  
    6    ADREasx  
    7    123 45  
    8    adc de  
    9    adc,.de  
    10   1B  
    10   abcbvbnb  
      
    已选择9行。  
      
    tbs@TICKET> -- 查询value中不包含任何数字的记录。  
    tbs@TICKET> select * from fzq where regexp_like(value,'^[^[:digit:]]+$');  
      
    ID   VALUE  
    ---- ----------  
    4    abc  
    5    abcde  
    6    ADREasx  
    8    adc de  
    9    adc,.de  
    10   abcbvbnb  
      
    已选择6行。  
        www.2cto.com  
    tbs@TICKET> --查询以12或者1b开头的记录.不区分大小写。  
    tbs@TICKET> select * from fzq where regexp_like(value,'^1[2b]','i');  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    3    1b3b560  
    7    123 45  
    10   1B  
      
    tbs@TICKET> --查询以12或者1b开头的记录.区分大小写。  
    tbs@TICKET> select * from fzq where regexp_like(value,'^1[2B]');  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    7    123 45  
    10   1B  
      
    tbs@TICKET> -- 查询数据中包含空白的记录。  
    tbs@TICKET> select * from fzq where regexp_like(value,'[[:space:]]');  
      
    ID   VALUE  
    ---- ----------  
    7    123 45  
    8    adc de  
      
    tbs@TICKET> --查询所有包含小写字母或者数字的记录。  
    tbs@TICKET> select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');  
      
    ID   VALUE  
    ---- ----------  
    1    1234560  
    2    1234560  
    4    abc  
    5    abcde  
    10   abcbvbnb  
    11   11114560  
    11   11124560  
      
    已选择7行。  
      
    tbs@TICKET> --查询任何包含标点符号的记录。  
    tbs@TICKET> select * from fzq where regexp_like(value,'[[:punct:]]');  
      
    ID   VALUE  
    ---- ----------  
    9    adc,.de  
      
    tbs@TICKET>   
    tbs@TICKET> select * from dual where regexp_like('b', '^[abc]$');  
        www.2cto.com  
    D  
    -  
    X  
      
    tbs@TICKET>   
    tbs@TICKET> select * from dual where regexp_like('abc', '^[abc]$');  
      
    未选定行  
      
    tbs@TICKET>   
    tbs@TICKET> select * from dual where regexp_like('abc', '^a[abc]c$');  
      
    D  
    -  
    X  
      
    tbs@TICKET>   
    tbs@TICKET> spool off; 
  • 相关阅读:
    kubernetes对象之secrets
    kubernetes对象之cronjob
    Kubernetes对象之ReplicaSet
    详谈kubernetes更新-2
    详谈kubernetes滚动更新-1
    设计模式-抽象工厂模式
    深入JVM-Class装载系统
    设计模式-工厂方法模式
    设计模式-单例模式
    设计模式-6大设计原则
  • 原文地址:https://www.cnblogs.com/cxxjohnson/p/5294383.html
Copyright © 2011-2022 走看看