精华内容
下载资源
问答
  • Oracle regexp_like

    千次阅读 2017-02-10 11:38:29
    ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在...

    ORACLE中的支持正则表达式的函数主要有下面四个:
    1REGEXP_LIKE :与LIKE的功能相似
    2REGEXP_INSTR :与INSTR的功能相似
    3REGEXP_SUBSTR :与SUBSTR的功能相似
    4REGEXP_REPLACE :与REPLACE的功能相似
    它们在用法上与Oracle SQL 函数LIKEINSTRSUBSTR REPLACE 用法相同,
    但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
    POSIX 正则表达式由标准的元字符(metacharacters)所构成:
    '^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
    '$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 也匹
    配 '\n' 或 '\r'
    '.' 匹配除换行符之外的任何单字符。
    '?' 匹配前面的子表达式零次或一次。
    '+' 匹配前面的子表达式一次或多次。
    '*' 匹配前面的子表达式零次或多次。
    '|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的
    字符串。
    '( )' 标记一个子表达式的开始和结束位置。
    '[]' 标记一个中括号表达式。
    '{m,n}' 一个精确地出现次数范围,m=<出现次数<=n'{m}'表示出现m次,'{m,}'表示至少
    出现m次。
    \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
    字符簇: 
    [[:alpha:]] 任何字母。
    [[:digit:]] 任何数字。
    [[:alnum:]] 任何字母和数字。
    [[:space:]] 任何白字符。
    [[:upper:]] 任何大写字母。
    [[:lower:]] 任何小写字母。
    [[:punct:]] 任何标点符号。
    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
    各种操作符的运算优先级
    \转义符
    (), (?:), (?=), [] 圆括号和方括号
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, anymetacharacter 位置和顺序

    */
    --创建表
    create table fzq
    (
    id varchar(4),
    value varchar(10)
    );
    --数据插入
    insert into fzq values
    ('1','1234560');
    insert into fzq values
    ('2','1234560');
    insert into fzq values
    ('3','1b3b560');
    insert into fzq values
    ('4','abc');
    insert into fzq values
    ('5','abcde');
    insert into fzq values
    ('6','ADREasx');
    insert into fzq values
    ('7','123 45');
    insert into fzq values
    ('8','adc de');
    insert into fzq values
    ('9','adc,.de');
    insert into fzq values
    ('10','1B');
    insert into fzq values
    ('10','abcbvbnb');
    insert into fzq values
    ('11','11114560');
    insert into fzq values
    ('11','11124560');
    --regexp_like
    --查询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位并且全部是数字的记录。
    --使用like就不是很好实现了。
    select * from fzq where regexp_like(value,'1[0-9]{4}60');
    -- 也可以这样实现,使用字符集。
    select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');
    -- 查询value中不是纯数字的记录
    select * from fzq where not regexp_like(value,'^[[:digit:]]+$');
    -- 查询value中不包含任何数字的记录。
    select * from fzq where regexp_like(value,'^[^[:digit:]]+$');
    --查询以12或者1b开头的记录.不区分大小写。
    select * from fzq where regexp_like(value,'^1[2b]','i');
    --查询以12或者1b开头的记录.区分大小写。
    select * from fzq where regexp_like(value,'^1[2B]');
    -- 查询数据中包含空白的记录。
    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:]]');

     

    正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

    用户名:/^[a-z0-9_-]{3,16}$/

    密码:/^[a-z0-9_-]{6,18}$/

    十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

    电子邮箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

    URL/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

    IP 地址:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

    HTML 标签:/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

    Unicode编码中的汉字范围:/^[u4e00-u9fa5],{0,}$/

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

    匹配双字节字符(包括汉字在内)[^\x00-\xff]
    评注:可以用来计算字符串的长度(一个双字节字符长度计2ASCII字符计1

    匹配空白行的正则表达式:\n\s*\r
    评注:可以用来删除空白行

    匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
    评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

    匹配首尾空白字符的正则表达式:^\s*|\s*$
    评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    评注:表单验证时很实用

    匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
    评注:网上流传的版本功能很有限,上面这个基本可以满足需求

    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    评注:表单验证时很实用

    匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
    评注:匹配形式如 0511-4405222 或 021-87888822

    匹配腾讯QQ号:[1-9][0-9]{4,}
    评注:腾讯QQ号从10000开始

    匹配中国大陆邮政编码:[1-9]\d{5}(?!\d)
    评注:中国大陆邮政编码为6位数字

    匹配身份证:\d{15}|\d{18}
    评注:中国大陆的身份证为15位或18

    匹配ip地址:\d+\.\d+\.\d+\.\d+
    评注:提取ip地址时有用

    匹配特定数字:
    ^[1-9]\d*$    //匹配正整数
    ^-[1-9]\d*$   //匹配负整数
    ^-?[1-9]\d*$   //匹配整数
    ^[1-9]\d*|0$  //匹配非负整数(正整数 + 0
    ^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
    ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
    ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0
    ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0
    评注:处理大量数据时有用,具体应用时注意修正

    匹配特定字符串:
    ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
    ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
    ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
    ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
    ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

    去除精度纬度中非浮点数

     select jd,wd from xx_xa_xsczaqpc t where t.id not in  (

    select id from xx_xa_xsczaqpc where regexp_like(jd,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$')) ; 

    是双小数点的数

    select xx_jbxx_id,jd,wd from xx_xa_xsczaqpc t where regexp_like(jd,'^[1-9]\d*\.\d*\.\d*[1-9]\d*$'

    展开全文
  • oracle regexp_like介绍和例子 ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR :与SUBSTR的功能相似 4,REGEXP_...

    oracle 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 属性,则 $ 也匹
    配 ‘\n’ 或 ‘\r’。
    ‘’.’ 匹配除换行符之外的任何单字符。
    ‘’?’ 匹配前面的子表达式零次或一次。
    ‘’+’ 匹配前面的子表达式一次或多次。
    ‘’*’ 匹配前面的子表达式零次或多次。
    ‘’|’ 指明两项之间的一个选择。例子’^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的

    字符串。
    ‘’( )’ 标记一个子表达式的开始和结束位置。
    ‘’[]’ 标记一个中括号表达式。
    ‘’{m,n}’ 一个精确地出现次数范围,m=<出现次数<=n,’{m}‘表示出现m次,’{m,}'表示至少

    出现m次。

    \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

    字符簇:

    [[:alpha:]] 任何字母。

    [[:digit:]] 任何数字。

    [[:alnum:]] 任何字母和数字。

    [[:space:]] 任何白字符。

    [[:upper:]] 任何大写字母。

    [[:lower:]] 任何小写字母。

    [[:punct:]] 任何标点符号。

    [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

    各种操作符的运算优先级

    \转义符

    (), (?😃, (?=), [] 圆括号和方括号

    *, +, ?, {n}, {n,}, {n,m} 限定符

    ^, $, anymetacharacter 位置和顺序

    |
    *
    */

    –创建表

    create table fzq
    (
    (
    id varchar(4),
    value varchar(10)
    )
    );

    –数据插入
    i
    insert into fzq values
    (
    (‘1’,‘1234560’);
    insert into fzq values
    (
    (‘2’,‘1234560’);
    insert into fzq values
    (
    (‘3’,‘1b3b560’);
    insert into fzq values
    (
    (‘4’,‘abc’);
    insert into fzq values
    (
    (‘5’,‘abcde’);
    insert into fzq values
    (
    (‘6’,‘ADREasx’);
    insert into fzq values
    (
    (‘7’,‘123 45’);
    insert into fzq values
    (
    (‘8’,‘adc de’);
    insert into fzq values
    (
    (‘9’,‘adc,.de’);
    insert into fzq values
    (
    (‘10’,‘1B’);
    insert into fzq values
    (
    (‘10’,‘abcbvbnb’);
    insert into fzq values
    (
    (‘11’,‘11114560’);
    insert into fzq values
    (
    (‘11’,‘11124560’)

    –regexp_like

    –查询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位并且全部是数字的记录。

    –使用like就不是很好实现了。

    select * from fzq where regexp_like(value,‘1[0-9]{4}60’);

    – 也可以这样实现,使用字符集。
    select * from fzq where regexp_like(value,‘1[[:digit:]]{4}60’);

    – 查询value中不是纯数字的记录

    select * from fzq where not regexp_like(value,’1+$’);

    – 查询value中不包含任何数字的记录。
    select * from fzq where regexp_like(value,’[[:digit:]]+$’);

    –查询以12或者1b开头的记录.不区分大小写。
    select * from fzq where regexp_like(value,’^1[2b]’,‘i’);

    –查询以12或者1b开头的记录.区分大小写。
    select * from fzq where regexp_like(value,’^1[2B]’);

    – 查询数据中包含空白的记录。
    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:]]’);
    例子:判断姓名是否为空,少于两个字符,包含数字和字母

    create or replace

    FUNCTION CheckName(NameStr in VARCHAR2) RETURN integer

    As

    BEGIN

    –符合返回1,不符合返回0

    if(NameStr is null or length(NameStr)<2) then

      return 0;
    

    else

      if(NameStr like '%未取名%') then
    
       RETURN 0;
    
       end if;
    
       if regexp_like(NameStr,'^([a-z]+|[0-9]+|[A-Z]+)$') then
    
       return 0;
    
       end if; 
    
       return 1;      
    

    end if;
    END CheckName;

    学习了:http://www.cnblogs.com/einyboy/archive/2012/08/01/2617606.html


    1. [:digit:] ↩︎

    展开全文
  • ORACLE REGEXP_LIKE

    千次阅读 2014-12-31 09:48:45
    SELECT name FROM test_like WHERE name like '_a%';   即匹配test_like表name列中第2个字母是a的所有行。但是注意,Oracle匹配时区分大小写的。也就是说上面的查询时无法查询到name='SAas'这

     Oracle中的Like操作符使用'_'和'%'作为通配符,使用就像这样:

    Java代码  收藏代码
    1. SELECT name FROM test_like WHERE name like '_a%';   

        即匹配test_like表name列中第2个字母是a的所有行。但是注意,Oracle匹配时区分大小写的。也就是说上面的查询时无法查询到name='SAas'这行的。

     

        Oracle10g中提供的正则表达式功能可以很好的解决这个问题,当然这不是使用正则表达式函数的唯一优点,实际上它比Like操作符强大的多。

        正则表达式的语法就不用多说了,现在大多数语言都支持正则表达式了。

        下面主要介绍下Oracle中正表达式函数REGEXP_LIKE的使用:

    Sql代码  收藏代码
    1. REGEXP_LIKE(x, pattern [, match_option])  
    2.   
    3. 当源字符串x匹配正则表达式pattern时,返回true。可以使用match_option修改默认匹配选项,该参数可以被设置为:  
    4.   
    5. 'c', 说明在进行匹配时区分大小写(默认选项)  
    6. 'i', 说明在进行匹配时不区分大小写  
    7. 'n'   允许使用可以匹配任意字符的操作符(通常是'.')  
    8. 'm', 将x作为一个包含多行的字符串  

        举个例子:

    Sql代码  收藏代码
    1. SELECT * FROM test_reg WHERE REGEXP_LIKE(name'(a)\1''i');  

        上面的SQL语句匹配test_reg表中name列含有两个连续字符'a'(不区分大小写)的行,如name='SaAs'。此外,这里我们还使用了正则表达式中的后引用语法——\n表示重复n次上次匹配的内容,此处(a)\1表示匹配两个连续的字符'a'。

        需要注意的是,后引用必须使用双括号,否则会出现如下结果:

    Sql代码  收藏代码
    1. SELECT * FROM test_reg WHERE REGEXP_LIKE(name'a\1''i')  
    2.    
    3. ORA-12727: 正则表达式中的后向引用无效  

     

        最后一点,不要混淆LIKE操作符的通配符和正则表达式的语法,也就是说不要再正则表达式中使用LIKE操作符中的通配符,如果这样做会得到未知的结果,因为'_'和'%'会被正则表达式当做普通字符进行匹配。

        比如下面这条SQL想要得到name='SaAs'这条记录,但实际的查询结果为空。

    Sql代码  收藏代码
    1. SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name'^_(a)\1''i');  
    2.    
    3. NAME  
    4. ----------  

       实际应该使用:

    Sql代码  收藏代码
    1. SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name'^.(a)\1''i');  
    2.    
    3. NAME  
    4. ----------  
    5. SaAs  

    可行的简单实用方法之一:
     REGEXP_LIKE (job_id, '[ACADFIMKSA]_M[ANGR]')   匹配所有方括号的字符,如匹配结果:AC_MGR


    展开全文
  • About Oracle REGEXP_LIKE

    2020-03-23 15:37:13
    REGEXP_LIKE(字段名, ‘(匹配串1|匹配串2|…)’) ; //全模糊匹配 REGEXP_LIKE(字段名, ‘^(匹配串1|匹配串2|…)’) ; //右模糊匹配 REGEXP_LIKE(字段名, ‘(匹配串1|匹配串2|…)$’) ; //左模糊匹配 CREATE OR ...

    Oracle sql like多个条件函数:

    REGEXP_LIKE(字段名, ‘(匹配串1|匹配串2|…)’) ; //全模糊匹配
    REGEXP_LIKE(字段名, ‘^(匹配串1|匹配串2|…)’) ; //右模糊匹配
    REGEXP_LIKE(字段名, ‘(匹配串1|匹配串2|…)$’) ; //左模糊匹配


    CREATE OR REPLACE VIEW DWT_ARRAY_TT_2019 AS
    SELECT /*+ PARALLEL( T , 4 )*/
            FUN_GET_DAY_TIMEKEY(T.PERIOD_DATE) AS DAY_TIMEKEY
           ,T.EQP_ID
           ,T.STEP_ID
           ,T.PRODUCT_ID
           ,T.GLS_TYPE
           ,T.GLS_ID
           ,T.TACT_TIME
    FROM DWT_TACT_TIME_A T,DWD_EQP_AF T1
    WHERE T.FACTORY='ARRAY'
    AND T.EQP_ID LIKE '%CL'
    AND REGEXP_LIKE(T.EQP_ID,'^(SPM-|SPM-|SPI-|VDN-|CAK-|WSD-|WGT-|WIG-|WIT-|WRS-|WUK-|XGB-|XSB-|XOB-)')
    AND REGEXP_LIKE(T.PRODUCT_ID,'^(D41|D53|D61)')
    AND T.TACT_TIME<=300
    AND T.PERIOD_DATE>=TO_DATE('20190101080000','yyyymmddhh24miss')
    AND T.PERIOD_DATE< TO_DATE('20191210080000','yyyymmddhh24miss')
    AND T.GLS_TYPE !='DM';
    
    展开全文
  • Oracle regexp_like使用

    千次阅读 2019-12-28 19:51:14
    Oracle/PLSQL 中的REGEXP_LIKE条件的语法是: REGEXP_LIKE ( expression, pattern [, match_parameter ] ) 参数 expression - 字符表达式,例如列或字段。它可以是VARCHAR2,CHAR,NVARCHAR2,NCHAR,CLOB或...
  • Oracle regexp_like 使用案例

    千次阅读 2014-12-25 10:57:40
    oracle regexp_like 案例: select count(1) from tb_base_account where REGEXP_LIKE(username,'^1[34578]\d{9}$');
  • 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR :与SUBSTR的功能相似 4,REGEXP_REPLACE :与REPLACE的功能相似 它们在用法上与Oracle SQL 函数LIKE、INSTR、...
  • Oracle REGEXP_LIKE介绍和例子
  • 大概格式是这样:regexp_like(字段名,匹配值) 例如:regexp_like(ACTIVITY_INDU_CODE,'123|456') '|'符号前后不能有空格,否则会影响匹配结果
  • oracle regexp_like介绍和例子 ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR :与SUBSTR的功能相似 4,REGEXP_...
  • oracle regexp_like函数和replace函数的用法
  • ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SUBSTR :与SUBSTR的功能...
  • select d1 from t1 where regexp_like(d1,’^[0-9a-zA-Z]+$’) +:表示匹配前面的字表达式1次或多次(*号表示至少匹配0次) ^:匹配输入字符串开始的位置,对应like中的like ’xxx%’,即没有前模糊查询(^在[]中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 768
精华内容 307
关键字:

oracleregexp_like