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

oracle正則表達式多項匹配時相似項有優(yōu)先級詳解

 更新時間:2023年06月27日 16:10:24   作者:他們叫我技術總監(jiān)  
這篇文章主要給大家介紹了關于oracle正則表達式多項匹配時相似項有優(yōu)先級的相關資料,Oracle中使用正則表達式需先使用REGEXP_LIKE函數(shù)來匹配字符串,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言:

Oracle常用正則表達式函數(shù)主要以下5個:

  • REGEXP_LIKE:與LIKE的功能相似;
  • REGEXP_SUBSTR :與SUBSTR的功能相似;
  • REGEXP_INSTR :與INSTR的功能相似;
  • REGEXP_REPLACE :與REPLACE的功能相似;
  • REGEXP_COUNT :與COUNT的功能相似;

常用的正則表達式匹配符有以下運算符,本文重點來闡述“|”指定多個選項,容易被忽視的問題。

 一、正則表達式用法(Regexp_Like為例)

Regexp_Like()函數(shù) 模糊匹配。

1、語法規(guī)則

regexp_like(source_string,pattern[match_parameter])

2、注釋

  • source_string:傳入的字符串,可以是常量,也可以是某個值類型為串的列;
  • pattern:要進行匹配的字符串;
  • match_parameter:文本量,進一步訂制搜索,取值如下:
    • ‘i’ 用于不區(qū)分大小寫的匹配。
    • ‘c’ 用于區(qū)分大小寫的匹配。
    • ‘n’ 允許將句點“.”作為通配符來匹配換行符。如果省略該參數(shù),句點將不匹配換行符。
    • ‘m’ 將源串視為多行。即將“^”和“$”分別看做源串中任意位置任意行的開始和結(jié)束,而不是看作整個源串的開始或結(jié)束。如果省略該參數(shù),源串將被看作一行來處理。

如果取值不屬于上述中的某個,將會報錯。如果指定了多個互相矛盾的值,將使用最后一個值。如’ic’會被當做’c’處理。
省略該參數(shù)時:默認區(qū)分大小寫、句點不匹配換行符、源串被看作一行。

3、實例

代碼:

select   * from (
select  'ABC你好'  reg from dual 
union 
select  'a233'  reg from dual)
where regexp_like(reg,'[0-9]','c')--匹配有數(shù)字的字符串

效果:

 解析:

可以看到正則表達式,通過后面的'[0-9]'的規(guī)則來獲取我們想要的數(shù)據(jù)。

二、正則表達式優(yōu)先級的注意點

當我們使用REGEXP_REPLACE將多個表達式的數(shù)據(jù)替換時,這時候我們要考慮替換規(guī)則有沒有類似項,比如REGEXP_REPLACE(reg,'-BL|-BL1')即替換掉字符串reg里面包含-BL或者-BL1的字符串,此時如果我們按這種寫法REGEXP_REPLACE(reg,'-BL|-BL1'),實際效果是只會替換掉-BL,因為oracle會按照替換規(guī)則的順序來執(zhí)行,如果滿足了第一個條件,后面的就不會再去執(zhí)行了,這也是為了加快了程序的處理速度,但同時也會造成我們常常忽略的問題。

好的,我們來看看下面的具體案例吧。

代碼:

select reg,  REGEXP_REPLACE(reg,'-BL|-BL1')reg_replace from (
select 'A_123456D-BL1' reg  FROM dual)

效果:

解析:

因為正則表達式,默認會按順序執(zhí)行,此時正則表達式,-BL滿足規(guī)則了,就不會執(zhí)行-BL1了,因此就會得到的結(jié)果是對應的REG字符串里面替換后還會多出了一個1。

三、解決方案

現(xiàn)實情況下,我們往往會有很多替換規(guī)則,少則幾個,多則好幾百,如果我們用replace函數(shù)估計要嵌套幾百次,估計你會直搖頭吧,雖然regexp_replace可以一次性將多個規(guī)則寫在一起,但是我們還是要注意上述提到的優(yōu)先級的問題。因此我們需要將相同的部分放到最后,如上面說到的“-BL”此時就能達到我們的需求了。

擴展:

我們來看個現(xiàn)實的案例。當面對168個規(guī)則時我們會遇到哪些問題。

1、正則表達式過長

解決方法:嵌套多個正則表達式 ,像竹筍一樣多疊幾層即可。

2、替換規(guī)則失效

出來的數(shù)據(jù)還是有我們不想要的數(shù)據(jù),比如下面的三個批次,我們只想保存一條,如果我們替換規(guī)則不當就會造成,這三個字符串替換后還是不相同的,無法達到我們想要的效果。

解決辦法:我們首先將所有的替換規(guī)則用EXCEL表例好,然后排好優(yōu)先級,然后再去修改正則表達式。如圖所示我們將規(guī)則列好,然后用不同顏色標示優(yōu)先級。然后再整理表達式。如下圖所示小編將最小匹配項的表達式放到最后面了,這樣就能達到我們想要的效果了。

四、總結(jié) 

針對復雜的數(shù)據(jù)分析,首先建議從業(yè)務角度去規(guī)范,因為雖然技術可以處理,但是歷史數(shù)據(jù)處理成本是巨大,因此一個企業(yè)的數(shù)據(jù)底座搭建,是離不開強標準化的數(shù)據(jù)治理的。

到此這篇關于oracle正則表達式多項匹配時相似項有優(yōu)先級的文章就介紹到這了,更多相關oracle正則表達式多項匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何將Oracle的一個大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(圖文教程)

    如何將Oracle的一個大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(圖文教程)

    這篇文章主要介紹了如何將Oracle的一個大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(圖文教程),本文圖文并茂給大家介紹的非常詳細,需要的的朋友參考下吧
    2017-05-05
  • oracle橫向縱向求和代碼實例

    oracle橫向縱向求和代碼實例

    這篇文章主要介紹了oracle橫向縱向求和的相關內(nèi)容,涉及兩個實例,具有一定參考價值。需要的朋友可以了解。
    2017-10-10
  • Oracle進階DECODE函數(shù)使用詳解

    Oracle進階DECODE函數(shù)使用詳解

    這篇文章介紹了Oracle進階DECODE函數(shù)的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Oracle批量查詢、刪除、更新使用BULK COLLECT提高效率

    Oracle批量查詢、刪除、更新使用BULK COLLECT提高效率

    BULK COLLECT(成批聚合類型)和數(shù)組集合type類型is table of 表%rowtype index by binary_integer用法筆記。對oracle批量查詢 刪除 更新使用bulk collect提高效果的相關知識感興趣的朋友通過本文一起學習吧
    2017-04-04
  • Oracle sqlldr導入一個日期列實例詳解

    Oracle sqlldr導入一個日期列實例詳解

    這篇文章主要介紹了Oracle sqlldr導入一個日期列實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • Oracle查看執(zhí)行計劃的實現(xiàn)

    Oracle查看執(zhí)行計劃的實現(xiàn)

    查看Oracle 的執(zhí)行計劃的目的是為了了解 SQL 查詢或語句在數(shù)據(jù)庫中的執(zhí)行方式和性能表現(xiàn),本文主要介紹了Oracle查看執(zhí)行計劃的實現(xiàn),感興趣的可以了解一下
    2024-02-02
  • oracle數(shù)據(jù)庫慢查詢SQL實例詳解

    oracle數(shù)據(jù)庫慢查詢SQL實例詳解

    一般的業(yè)務系統(tǒng)如果遇到性能問題,絕大部分都是來自數(shù)據(jù)庫的,有的業(yè)務一個查詢執(zhí)行時間好幾秒,這就是我們說說的SQL慢查詢,這篇文章主要給大家介紹了關于oracle數(shù)據(jù)庫慢查詢SQL的相關資料,需要的朋友可以參考下
    2024-06-06
  • Oracle中decode函數(shù)應用示例詳解

    Oracle中decode函數(shù)應用示例詳解

    Oracle?DECODE函數(shù)功能很強,這篇文章主要給大家介紹了關于Oracle中decode函數(shù)應用示例的相關資料,文中通過代碼介紹的非常詳細,對大家學習或者使用oracle具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-05-05
  • Oracle生成不重復票號與LPAD,RPAD與NEXTVAL函數(shù)解析

    Oracle生成不重復票號與LPAD,RPAD與NEXTVAL函數(shù)解析

    這篇文章主要介紹了Oracle生成不重復票號與LPAD,RPAD與NEXTVAL函數(shù)解析,小編覺得還是挺不錯的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • Oracle導入導出dmp文件具體示例

    Oracle導入導出dmp文件具體示例

    這篇文章主要給大家介紹了關于Oracle導入導出dmp文件的相關資料,dmp文件為oracle數(shù)據(jù)庫的數(shù)據(jù)備份文件,執(zhí)行oracle數(shù)據(jù)庫導出dmp文件,相當于執(zhí)行數(shù)據(jù)庫備份;執(zhí)行導入dmp文件,相當于數(shù)據(jù)庫還原,需要的朋友可以參考下
    2023-11-11

最新評論