欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle中sql 正則寫法詳解

 更新時間:2023年04月03日 09:23:49   作者:MyySophia  
Oracle中使用正則表達式需先使用REGEXP_LIKE函數(shù)來匹配字符串。正則表達式的語法與一般正則表達式相似,但具體的寫法也受不同版本的Oracle環(huán)境不同,這篇文章主要介紹了oracle中sql 正則怎么寫,需要的朋友可以參考下

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

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

如:

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

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

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

Oracle 11g及以上版本

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

例如,可以使用如下的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'

是否走索引

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

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

SELECT * FROM table WHERE text LIKE ‘%abc%’;
如果 text 字段上有索引,那么這個查詢會利用索引優(yōu)化執(zhí)行,因為 LIKE 操作符可以使用前綴索引。但是,如果使用正則表達式,查詢語句將變?yōu)椋?/p>

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

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

到此這篇關于oracle中sql 正則怎么寫的文章就介紹到這了,更多相關oracle sql 正則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Oracle中sys和system的區(qū)別小結

    Oracle中sys和system的區(qū)別小結

    SYS用戶具有DBA權限,并且擁有SYS模式,只能通過SYSDBA登陸數(shù)據(jù)庫。是Oracle數(shù)據(jù)庫中權限最高的帳號 SYSTEM具有DBA權限。但沒有SYSDBA權限。平常一般用該帳號管理數(shù)據(jù)庫就可以了。
    2009-11-11
  • Linux系統(tǒng)下Oracle數(shù)據(jù)庫的安裝和啟動關閉操作教程

    Linux系統(tǒng)下Oracle數(shù)據(jù)庫的安裝和啟動關閉操作教程

    這篇文章主要介紹了Linux系統(tǒng)下Oracle數(shù)據(jù)庫的安裝和啟動關閉操作教程,并針對在sqlplus下所需執(zhí)行的命令進行講解,需要的朋友可以參考下
    2015-12-12
  • 解決maven不能下載oracle jdbc驅動的問題

    解決maven不能下載oracle jdbc驅動的問題

    這篇文章主要介紹了解決maven不能下載oracle jdbc驅動的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Oracle9i取得建表和索引的DDL語句

    Oracle9i取得建表和索引的DDL語句

    Oracle9i取得建表和索引的DDL語句...
    2007-03-03
  • Oracle to_char函數(shù)的使用方法

    Oracle to_char函數(shù)的使用方法

    在Oracle數(shù)據(jù)庫中,to_char函數(shù)是我們最常用的函數(shù)之一,下文對to_char函數(shù)的應用作了詳細的介紹,如果您感興趣的話,不妨一看
    2014-08-08
  • 對學Oracle數(shù)據(jù)庫初學者的開場篇

    對學Oracle數(shù)據(jù)庫初學者的開場篇

    這篇文章主要介紹了對學Oracle數(shù)據(jù)庫初學者的開場篇,方便想學習oracle數(shù)據(jù)庫的朋友
    2015-05-05
  • 基于OGG實現(xiàn)Oracle實時同步MySQL的全過程

    基于OGG實現(xiàn)Oracle實時同步MySQL的全過程

    這篇文章詳細闡述了基于OGG實現(xiàn)Oracle實時同步MySQL全過程,文中通過圖文結合和代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-11-11
  • Oracle鎖處理、解鎖方法

    Oracle鎖處理、解鎖方法

    本文通過實例代碼較詳細的給大家介紹了Oracle鎖處理、解鎖方法,需要的朋友可以參考下
    2018-06-06
  • Oracle常用函數(shù)超詳細整理

    Oracle常用函數(shù)超詳細整理

    Oracle是一種常用的關系型數(shù)據(jù)庫管理系統(tǒng),提供了許多內(nèi)置函數(shù),用于處理和操作數(shù)據(jù),下面這篇文章主要給大家介紹了關于Oracle常用函數(shù)超詳細整理的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Oracle中實現(xiàn)行列互轉的方法分享

    Oracle中實現(xiàn)行列互轉的方法分享

    這篇文章主要為大家總結了Oracle中實現(xiàn)行列互轉的簡單方法,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06

最新評論