在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
,一開始以為是建表的時候類型選得不對,int
、varchar2(20)
改了又改,還是不行。
原來是雙引號錯了,當數據以 char
的形式存在時,應加單引號,則插入數據庫就不會出現錯誤。
參考鏈接1:oracle中同個字段匹配多個like(or關系)實例解決方案
參考鏈接2:oracle 字段like多個條件(or關系)