溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle中sql正則怎么寫

發布時間:2023-05-09 15:29:26 來源:億速云 閱讀:132 作者:zzz 欄目:開發技術

本篇內容介紹了“oracle中sql正則怎么寫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Oracle中使用正則表達式需先使用REGEXP_LIKE函數來匹配字符串。正則表達式的語法與一般正則表達式相似,但具體的寫法也受不同版本的Oracle環境不同。

在Oracle 10g及以下版本中,可以使用POSIX擴展來進行正則匹配

如:

^:匹配字符串的開始位置;
$:匹配字符串的結束位置;
.:匹配任何單個字符;
[ ]:匹配指定集合內的任何字符,如[abc]匹配a、b、c中任意一個字符;
[^ ]:匹配不在指定集合內的任何字符,如[^abc]匹配除a、b、c之外的任意字符;
*:匹配前面的子表達式零次或多次;
+:匹配前面的子表達式一次或多次;
?:匹配前面的子表達式零次或一次;
{n}:n為非負整數,匹配恰好n次;
{n,}:n為非負整數,匹配至少n次;
{n,m}:n和m為非負整數且n<=m,匹配至少n次且至多m次。
例如,可以使用REGEXP_LIKE函數配合正則表達式來查找符合條件的字符串:

SELECT *
FROM employees
WHERE REGEXP_LIKE(job_title, '^Sales.*Manager$');

上述SQL查詢會查找職位名稱以“Sales”開頭,且以“Manager”結尾的所有員工數據。

Oracle 11g及以上版本

對于Oracle 11g及以上版本,可以使用更強大的Perl兼容正則表達式(PCRE)來進行匹配
在使用PCRE時,先需要使用REGEXP_REPLACE函數中加入&rsquo;c&rsquo;選項進行匹配,然后再使用相應的正則表達式來實現匹配。

例如,可以使用如下的SQL查詢來查找所有包含“John”或“Johnson”的名稱:

SELECT *
FROM employees
WHERE REGEXP_REPLACE(name, '(John|Johnson)', '*', 1, 0, 'c') != name;

我的實際例子:

SELECT *
--DISTINCT CODE,count(1)
FROM table
WHERE 1 = 1
AND DATA_CATE = 'CPAU'
--AND ext_5 LIKE 'ASSM%'
AND REGEXP_REPLACE(ext_5, '(ASSM01|PSVA0100)', '*', 1, 0, 'c') != ext_5;
AND VALID_FLG = 'Y'

是否走索引

正則表達式的匹配通常需要對目標字符串全文掃描,因此,在大多數情況下,使用正則表達式無法利用數據庫索引。也就是說,在使用正則表達式時,往往無法使用索引來優化查詢。

例如,假設有一個包含文本的表,其中有一個 text 字段,我們希望查找所有包含“abc”字符的記錄。如果使用 LIKE 操作符,可以這樣寫:

SELECT * FROM table WHERE text LIKE &lsquo;%abc%&rsquo;;
如果 text 字段上有索引,那么這個查詢會利用索引優化執行,因為 LIKE 操作符可以使用前綴索引。但是,如果使用正則表達式,查詢語句將變為:

SELECT * FROM table WHERE REGEXP_LIKE(text, &lsquo;abc&rsquo;);
在這種情況下,不能使用索引來優化查詢,因為 REGEXP_LIKE 函數需要全文掃描才能找到匹配的記錄。

雖然正則表達式在某些情況下可能無法使用索引優化,但是可以盡可能地使用模糊查詢來代替正則表達式,從而使用索引來優化查詢。例如,在上面的例子中,可以使用 LIKE 操作符而不是 REGEXP_LIKE 函數來查詢相同的數據。雖然 LIKE 操作符不能使用正則表達式語法,但是它可以使用前綴索引進行優化,可以在滿足需求的情況下提高性能。

“oracle中sql正則怎么寫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女