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關系)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM