Oracle REGEXP_LIKE模糊查詢用法例子
目錄
- 1、函數介紹
- 2、使用此函數不區分大小寫
- 2-1、LIKE 函數
- 2-2、REGEXP_LIKE 函數
- 3、多條件
- 3-1、多個OR條件時,LIKE函數就不能滿足需求了。
- 3-2、AND :既有A又有B
- 3-3、檢索以某個字符串開頭的數據
- 3-4、檢索以某個字符串結尾的數據
- 補充:oracle模糊查詢中的regexp_like嵌套子查詢用法
- 總結
1、函數介紹
REGEXP_LIKE 函數在功能上與 LIKE 函數非常相似。 然而,雖然 LIKE 允許簡單的字符串匹配搜索,但 REGEXP_LIKE 函數非常強大,因為除了字符串匹配搜索之外,它還可以使用正則表達式。 REGEXP_LIKE 可以按如下方式使用。
REGEXP_LIKE ( string , pattern [, match] )
REGEXP_LIKE ( 檢索對象 , 檢索字符 [, 檢索參數] )
' 'i':不區分大小寫
'c':區分大小寫
'n':將換行符與“n”句點 (.) 匹配
'm':將搜索目標視為多行,并將“^”和“$”匹配到每行的開頭和結尾。
進行測試之前先創建表
CREATE TABLE test_table_regexp_like( message_val VARCHAR2(50) NOT NULL); INSERT INTO test_table_regexp_like VALUES ("Data Discrepancy needs to be fixed.");INSERT INTO test_table_regexp_like VALUES ("I am in desperate NEED of money.");INSERT INTO test_table_regexp_like VALUES ("I really NeeD you forever.");
2、使用此函數不區分大小寫
2-1、LIKE 函數
SELECT message_val AS message_val_likeFROM test_table_regexp_likeWHERE LOWER(message_val) LIKE "%need%";
查詢結果:
message_val
--------------------------------------------------
Data Discrepancy needs to be fixed.
I am in desperate NEED of money.
I really NeeD you forever.
2-2、REGEXP_LIKE 函數
SELECT message_val AS message_val_regexp_likeFROM test_table_regexp_likeWHERE REGEXP_LIKE(message_val, "need", "i");
查詢結果
message_val_regexp_like
--------------------------------------------------
DATA Discrepancy needs TO be fixed.
I am IN desperate NEED OF money.
I really NeeD you forever.
3、多條件
3-1、多個OR條件時,LIKE函數就不能滿足需求了。
-- 包含 am 或者 NeeD 的數據-- ”|“ 作用 = orSELECT message_val AS message_val_regexp_likeFROM test_table_regexp_likeWHERE REGEXP_LIKE(message_val, "am|NeeD");
查詢結果
message_val_regexp_like
--------------------------------------------------
I am IN desperate NEED OF money.
I really NeeD you forever.
3-2、AND :既有A又有B
-- AND 條件 ("really" 和 "you" 都包含的)-- "()|()" = AND SELECT message_val AS message_val_regexp_likeFROM test_table_regexp_likeWHERE REGEXP_LIKE(message_val, "(really)|(you)");
檢索結果
message_val_regexp_like
--------------------------------------------------
I really NeeD you forever.
3-3、檢索以某個字符串開頭的數據
-- 以 "I" 開頭,中間有 "you" 的字符串。-- "^" 字符串首位-- ".*" 任意字符串SELECT message_val AS message_val_regexp_likeFROM test_table_regexp_likeWHERE REGEXP_LIKE(message_val, "^I.*you.*");
檢索結果
message_val_regexp_like
--------------------------------------------------
I really NeeD you forever.
3-4、檢索以某個字符串結尾的數據
-- 以 "I" 開頭、以 "money." 結尾的字符串-- "^" :字符串首位-- "$" :字符串末尾SELECT message_val AS message_val_regexp_likeFROM test_table_regexp_likeWHERE REGEXP_LIKE(message_val, "^I.*money.$");
檢索結果
message_val_regexp_like
--------------------------------------------------
I am IN desperate NEED OF money.
補充:oracle模糊查詢中的regexp_like嵌套子查詢用法
oracle模糊查詢中的regexp_like嵌套子查詢用法
regexp_like一般用于模糊查詢某一列時包含多個查詢條件
需求1:在用戶表中查詢出賬號包含650000和230000的用戶。
select * from sys_user where regexp_like(account,"650000|230000")
以上的寫法等同于下面的寫法:
select * from sys_user where account like "%650000%" or account like"%230000%"
需求2:在另一張表中查詢出所需條件(查詢條件為另一個表的結果集),并在用戶表中以該條件模糊查詢對應的用戶信息。
即在sys_org表中查出類型為1的orgid并以此結果在sys_user表中查詢出對應的賬號信息。
select fullname,account from sys_user where REGEXP_LIKE (account,(select replace(wm_concat(orgid),",","|") from (select orgid from sys_org where orgtype = "1" order by orgid )))
解決思路:
若是以此結果集進行查詢會報錯:“單行子查詢返回多行”
1、將結果集顯示成一列。所用函數:wm_concat(列名)
注:wm_concat(列名),該函數可以把列值以","號分隔起來,并顯示成一行,即“行轉列”
select wm_concat(orgid) from (select orgid from sys_org where orgtype = "1" order by orgid )
2、將結果集用 | 分隔
select replace(wm_concat(orgid),",","|") from (select orgid from sys_org where orgtype = "1" order by orgid )
3、查詢條件并已完成,用 regexp_like查詢出所需信息即可
select fullname,account from sys_user where REGEXP_LIKE (account,(select replace(wm_concat(orgid),",","|") from (select orgid from sys_org where orgtype = "1" order by orgid )))
總結
到此這篇關于Oracle REGEXP_LIKE模糊查詢用法的文章就介紹到這了,更多相關Oracle REGEXP_LIKE模糊查詢內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!