• Oracle学习笔记:字段like多个条件(or关系)regexp_like的使用


    在Oracle中,有时候需要写like多条件的时候,总觉得很冗余,特别繁琐,例如:

    select * from table_test
    where col like '%abc%'
       or col like '%bcd%'
       or col like '%cde%'
       or col like '%ghi%';
    

    遂考虑,有没有简洁的解决方案。

    最后找到 regexp_like 尝试一番。

    -- 创建测试表
    create table temp_cwh_test
    (
     id varchar2(20),
     name varchar2(30)
    );
    -- 插入数据
    insert into temp_cwh_test values (1,'黄盖');
    insert into temp_cwh_test values(2,'吕布');
    insert into temp_cwh_test values(3,'貂蝉');
    insert into temp_cwh_test values(4,'鲁智深');
    insert into temp_cwh_test values(5,'诸葛亮');
    -- 查询
    select * from temp_cwh_test;
    

    缩写为:

    select * from temp_cwh_test
    where name like '%布%'
    or name like '%亮%'
    or name like '%貂%'
    
    select * from temp_cwh_test
    where regexp_like(name, '(貂|布|亮)')
    

    如果要匹配以字符串开头,可以:

    select * from temp_cwh_test
    where regexp_like(name, '^(貂|布|亮)')
    -- 1	3	貂蝉
    

    如果要匹配以字符串结尾,可以:

    select * from temp_cwh_test
    where regexp_like(name, '(貂|布|亮)$')
    -- 1	2	吕布
    -- 2	5	诸葛亮
    

    总结

    全模糊匹配:regexp_like(字段名, '(匹配字符串1|匹配字符串2|匹配字符串3|...)')

    左模糊匹配:regexp_like(字段名, '(匹配字符串1|匹配字符串2|匹配字符串3|...)$')

    右模糊匹配:regexp_like(字段名, '^(匹配字符串1|匹配字符串2|匹配字符串3|...)')

    额外报错记录

    在插入数据的时候 Oracle 报了一个错:Oracle ORA-00984: column not allowed here ,一开始以为是建表的时候类型选得不对,intvarchar2(20) 改了又改,还是不行。

    原来是双引号错了,当数据以 char 的形式存在时,应加单引号,则插入数据库就不会出现错误。

    参考链接1:oracle中同个字段匹配多个like(or关系)实例解决方案

    参考链接2:oracle 字段like多个条件(or关系)

  • 相关阅读:
    VS2003在解决方案范围内搜索卡死问题的解决
    文言古诗词
    中学名句
    Linux查看系统中socket状态
    为什么我希望用C而不是C++来实现ZeroMQ
    获取进程的IO计数
    Win7查看开关机记录
    VS的release工程设置为可调试
    VC开发中一些问题的解决
    shell脚本0——”一切皆文件“, 认识Shell
  • 原文地址:https://www.cnblogs.com/hider/p/12095810.html
Copyright © 2020-2023  润新知