真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle表達(dá)式怎么用 oracle函數(shù)怎么用

oracle 的正則表達(dá)式

oracle的正則表達(dá)式(10g才可以用)

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括平潭網(wǎng)站建設(shè)、平潭網(wǎng)站制作、平潭網(wǎng)頁(yè)制作以及平潭網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,平潭網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到平潭省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

oracle的正則表達(dá)式(regular expression)簡(jiǎn)單介紹

目前,正則表達(dá)式已經(jīng)在很多軟件中得到廣泛的應(yīng)用,包括*nix(Linux, Unix等),HP等操作系統(tǒng),PHP,C#,Java等開發(fā)環(huán)境。

Oracle 10g正則表達(dá)式提高了SQL靈活性。有效的解決了數(shù)據(jù)有效性,重復(fù)詞的辨認(rèn), 無(wú)關(guān)的空白檢測(cè),或者分解多個(gè)正則組成的字符串等問題。

Oracle 10g支持正則表達(dá)式的四個(gè)新函數(shù)分別是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。

它們使用POSIX 正則表達(dá)式代替了老的百分號(hào)(%)和通配符(_)字符。

特殊字符:

'^' 匹配輸入字符串的開始位置,在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合。

'$' 匹配輸入字符串的結(jié)尾位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,則 $ 也匹配 '\n' 或'\r'。

'.' 匹配除換行符 \n之外的任何單字符。

'?' 匹配前面的子表達(dá)式零次或一次。

'*' 匹配前面的子表達(dá)式零次或多次。

'+' 匹配前面的子表達(dá)式一次或多次。

'( )' 標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。

'[]' 標(biāo)記一個(gè)中括號(hào)表達(dá)式。

'{m,n}' 一個(gè)精確地出現(xiàn)次數(shù)范圍,m=出現(xiàn)次數(shù)=n,'{m}'表示出現(xiàn)m次,'{m,}'表示至少出現(xiàn)m次。

'|' 指明兩項(xiàng)之間的一個(gè)選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數(shù)字組合成的字符串。

\num 匹配 num,其中 num 是一個(gè)正整數(shù)。對(duì)所獲取的匹配的引用。

正則表達(dá)式的一個(gè)很有用的特點(diǎn)是可以保存子表達(dá)式以后使用,被稱為Backreferencing. 允許復(fù)雜的替換能力

如調(diào)整一個(gè)模式到新的位置或者指示被代替的字符或者單詞的位置. 被匹配的子表達(dá)式存儲(chǔ)在臨時(shí)緩沖區(qū)

中,緩沖區(qū)從左到右編號(hào), 通過\數(shù)字符號(hào)訪問。 下面的例子列出了把名字 aa bb cc 變成cc, bb, aa.

Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;

REGEXP_REPLACE('ELLENHILDISMIT

cc, bb, aa

'\' 轉(zhuǎn)義符。

字符簇:

[[:alpha:]] 任何字母。

[[:digit:]] 任何數(shù)字。

[[:alnum:]] 任何字母和數(shù)字。

[[:space:]] 任何白字符。

[[:upper:]] 任何大寫字母。

[[:lower:]] 任何小寫字母。

[[unct:]] 任何標(biāo)點(diǎn)符號(hào)。

[[:xdigit:]] 任何16進(jìn)制的數(shù)字,相當(dāng)于[0-9a-fA-F]。

各種操作符的運(yùn)算優(yōu)先級(jí)

\ 轉(zhuǎn)義符

(), (?, (?=), [] 圓括號(hào)和方括號(hào)

*, +, ?, {n}, {n,}, {n,m} 限定符

^, $, \anymetacharacter 位置和順序

| “或”操作

--測(cè)試數(shù)據(jù)

create table test(mc varchar2(60));

insert into test values('112233445566778899');

insert into test values('22113344 5566778899');

insert into test values('33112244 5566778899');

insert into test values('44112233 5566 778899');

insert into test values('5511 2233 4466778899');

insert into test values('661122334455778899');

insert into test values('771122334455668899');

insert into test values('881122334455667799');

insert into test values('991122334455667788');

insert into test values('aabbccddee');

insert into test values('bbaaaccddee');

insert into test values('ccabbddee');

insert into test values('ddaabbccee');

insert into test values('eeaabbccdd');

insert into test values('ab123');

insert into test values('123xy');

insert into test values('007ab');

insert into test values('abcxy');

insert into test values('The final test is is is how to find duplicate words.');

commit;

一、REGEXP_LIKE

select * from test where regexp_like(mc,'^a{1,3}');

select * from test where regexp_like(mc,'a{1,3}');

select * from test where regexp_like(mc,'^a.*e$');

select * from test where regexp_like(mc,'^[[:lower:]]|[[:digit:]]');

select * from test where regexp_like(mc,'^[[:lower:]]');

Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');

Select mc FROM test Where REGEXP_LIKE(mc,'^[^[:digit:]]');

二、REGEXP_INSTR

Select REGEXP_INSTR(mc,'[[:digit:]]$') from test;

Select REGEXP_INSTR(mc,'[[:digit:]]+$') from test;

Select REGEXP_INSTR('The price is $400.','\$[[:digit:]]+') FROM DUAL;

Select REGEXP_INSTR('onetwothree','[^[[:lower:]]]') FROM DUAL;

Select REGEXP_INSTR(',,,,,','[^,]*') FROM DUAL;

Select REGEXP_INSTR(',,,,,','[^,]') FROM DUAL;

三、REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(mc,'[a-z]+') FROM test;

SELECT REGEXP_SUBSTR(mc,'[0-9]+') FROM test;

SELECT REGEXP_SUBSTR('aababcde','^a.*b') FROM DUAL;

四、REGEXP_REPLACE

Select REGEXP_REPLACE('Joe Smith','( ){2,}', ',') AS RX_REPLACE FROM dual;

Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM dual;

oracle中使用正則表達(dá)式問題

a[[:space:]]{3}b

看a?? b后面似乎還有空格,但是沒看出來具體幾個(gè)。

[[:space:]]

--?注釋

--?如上表示任意空白,你可以在b后面再添加

如何在oracle中使用正則表達(dá)式

regexp_like 2。regexp_substr 3。regexp_instr 4。regexp_replace 看函數(shù)名稱大概就能猜到有什么用了。 regexp_like 只能用于條件表達(dá)式,和 like 類似,但是使用的正則表達(dá)式進(jìn)行匹配,語(yǔ)法很簡(jiǎn)單: regexp_substr 函數(shù),和 substr 類似,用于拾取合符正則表達(dá)式描述的字符子串,語(yǔ)法如下: regexp_instr 函數(shù),和 instr 類似,用于標(biāo)定符合正則表達(dá)式的字符子串的開始位置,語(yǔ)法如下: regexp_replace 函數(shù),和 replace 類似,用于替換符合正則表達(dá)式的字符串,語(yǔ)法如下: 這里解析一下幾個(gè)參數(shù)的含義: 1。source_char,輸入的字符串,可以是列名或者字符串常量、變量。 2。pattern,正則表達(dá)式。 3。match_parameter,匹配選項(xiàng)。 取值范圍: i:大小寫不敏感; c:大小寫敏感;n:點(diǎn)號(hào) . 不匹配換行符號(hào);m:多行模式;x:擴(kuò)展模式,忽略正則表達(dá)式中的空白字符。 4。position,標(biāo)識(shí)從第幾個(gè)字符開始正則表達(dá)式匹配。 5。occurrence,標(biāo)識(shí)第幾個(gè)匹配組。 6。replace_string,替換的字符串。 說了一堆文縐縐的,現(xiàn)在開始實(shí)例演練了,在此之前先建好一個(gè)表。 01 create table tmp as 02 with data as ( 03 select 'like' as id ,'a9999' as str from dual union all 04 select 'like' ,'a9c' from dual union all 05 select 'like' ,'A7007' from dual union all 06 select 'like' ,'123a34cc' from dual union all

在Oracle使用正規(guī)表達(dá)式編寫更好的SQL語(yǔ)句

Oracle Database g 的一個(gè)新特性大大提高了您搜索和處理字符數(shù)據(jù)的能力 這個(gè)特性就是正規(guī)表達(dá)式 是一種用來描述文本模式的表示方法 很久以來它已在許多編程語(yǔ)言和大量 UNIX 實(shí)用工具中出現(xiàn)過了 Oracle 的正規(guī)表達(dá)式的實(shí)施是以各種 SQL 函數(shù)和一個(gè) WHERE 子句操作符的形式出現(xiàn)的 如果您不熟悉正規(guī)表達(dá)式 那么這篇文章可以讓您了解一下這種新的極其強(qiáng)大然而表面上有點(diǎn)神秘的功能 已經(jīng)對(duì)正規(guī)表達(dá)式很熟悉的讀者可以了解如何在 Oracle SQL 語(yǔ)言的環(huán)境中應(yīng)用這種功能 什么是正規(guī)表達(dá)式? 正規(guī)表達(dá)式由一個(gè)或多個(gè)字符型文字和/或元字符組成 在最簡(jiǎn)單的格式下 正規(guī)表達(dá)式僅由字符文字組成 如正規(guī)表達(dá)式 cat 它被讀作字母 c 接著是字母 a 和 t 這種模式匹配 cat location 和 catalog 之類的字符串 元字符提供算法來確定 Oracle 如何處理組成一個(gè)正規(guī)表達(dá)式的字符 當(dāng)您了解了各種元字符的含義時(shí) 您將體會(huì)到正規(guī)表達(dá)式用于查找和替換特定的文本數(shù)據(jù)是非常強(qiáng)大的 驗(yàn)證數(shù)據(jù) 識(shí)別重復(fù)關(guān)鍵字的出現(xiàn) 檢測(cè)不必要的空格 或分析字符串只是正規(guī)表達(dá)式的許多應(yīng)用中的一部分 您可以用它們來驗(yàn)證電話號(hào)碼 郵政編碼 電子郵件地址 社會(huì)安全號(hào)碼 IP 地址 文件名和路徑名等的格式 此外 您可以查找如 HTML 標(biāo)記 數(shù)字 日期之類的模式 或任意文本數(shù)據(jù)中符合任意模式的任何事物 并用其它的模式來替換它們 用 Oracle Database g 使用正規(guī)表達(dá)式 您可以使用最新引進(jìn)的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR REGEXP_SUBSTR 以及 REGEXP_REPLACE 函數(shù)來發(fā)揮正規(guī)表達(dá)式的作用 您將體會(huì)到這個(gè)新的功能如何對(duì) LIKE 操作符和 INSTR SUBSTR 和 REPLACE 函數(shù)進(jìn)行了補(bǔ)充 實(shí)際上 它們類似于已有的操作符 但現(xiàn)在增加了強(qiáng)大的模式匹配功能 被搜索的數(shù)據(jù)可以是簡(jiǎn)單的字符串或是存儲(chǔ)在數(shù)據(jù)庫(kù)字符列中的大量文本 正規(guī)表達(dá)式讓您能夠以一種您以前從未想過的方式來搜索 替換和驗(yàn)證數(shù)據(jù) 并提供高度的靈活性 正規(guī)表達(dá)式的基本例子 在使用這個(gè)新功能之前 您需要了解一些元字符的含義 句號(hào) ( ) 匹配一個(gè)正規(guī)表達(dá)式中的任意字符(除了換行符) 例如 正規(guī)表達(dá)式 a b 匹配的字符串中首先包含字母 a 接著是其它任意單個(gè)字符(除了換行符) 再接著是字母 b 字符串 axb xaybx 和 abba 都與之匹配 因?yàn)樵谧址须[藏了這種模式 如果您想要精確地匹配以 a 開頭和以 b 結(jié)尾的一條三個(gè)字母的字符串 則您必須對(duì)正規(guī)表達(dá)式進(jìn)行定位 脫字符號(hào) (^) 元字符指示一行的開始 而美元符號(hào) ($) 指示一行的結(jié)尾(參見表 ) 因此 正規(guī)表達(dá)式 ^a b$ 匹配字符串 aab abb 或 axb 將這種方式與 LIKE sup ;ù×÷·?提供的類似的模式匹配 a_b 相比較 其中 (_) 是單字符通配符 默認(rèn)情況下 一個(gè)正規(guī)表達(dá)式中的一個(gè)單獨(dú)的字符或字符列表只匹配一次 為了指示在一個(gè)正規(guī)表達(dá)式中多次出現(xiàn)的一個(gè)字符 您可以使用一個(gè)量詞 它也被稱為重復(fù)操作符 如果您想要得到從字母 a 開始并以字母 b 結(jié)束的匹配模式 則您的正規(guī)表達(dá)式看起來像這樣 ^a *b$ * 元字符重復(fù)前面的元字符 ( ) 指示的匹配零次 一次或更多次 LIKE 操作符的等價(jià)的模式是 a%b 其中用百分號(hào) (%) 來指示任意字符出現(xiàn)零次 一次或多次 表 給出了重復(fù)操作符的完整列表 注意它包含了特殊的重復(fù)選項(xiàng) 它們實(shí)現(xiàn)了比現(xiàn)有的 LIKE 通配符更大的靈活性 如果您用圓括號(hào)括住一個(gè)表達(dá)式 這將有效地創(chuàng)建一個(gè)可以重復(fù)一定次數(shù)的子表達(dá)式 例如 正規(guī)表達(dá)式 b(an)*a 匹配 ba bana banana yourbananasplit 等 Oracle 的正規(guī)表達(dá)式實(shí)施支持 POSIX (可移植操作系統(tǒng)接口)字符類 參見表 中列出的內(nèi)容 這意味著您要查找的字符類型可以非常特別 假設(shè)您要編寫一條僅查找非字母字符的 LIKE 條件 — 作為結(jié)果的 WHERE 子句可能不經(jīng)意就會(huì)變得非常復(fù)雜 POSIX 字符類必須包含在一個(gè)由方括號(hào) ([]) 指示的字符列表中 例如 正規(guī)表達(dá)式 [[:lower:]] 匹配一個(gè)小寫字母字符 而 [[:lower:]]{ } 匹配五個(gè)連續(xù)的小寫字母字符 除 POSIX 字符類之外 您可以將單獨(dú)的字符放在一個(gè)字符列表中 例如 正規(guī)表達(dá)式 ^ab[cd]ef$ 匹配字符串 abcef 和 abdef 必須選擇 c 或 d 除脫字符 (^) 和連字符 ( ) 之外 字符列表中的大多數(shù)元字符被認(rèn)為是文字 正規(guī)表達(dá)式看起來很復(fù)雜 這是因?yàn)橐恍┰址哂须S上下文環(huán)境而定的多重含義 ^ 就是這樣一種元字符 如果您用它作為一個(gè)字符列表的第一個(gè)字符 它代表一個(gè)字符列表的非 因此 [^[:digit:]] 查找包含了任意非數(shù)字字符的模式 而 ^[[:digit:]] 查找以數(shù)字開始的匹配模式 連字符 ( ) 指示一個(gè)范圍 正規(guī)表達(dá)式 [a m] 匹配字母 a 到字母 m 之間的任意字母 但如果它是一個(gè)字符行中的第一個(gè)字符(如在 [ afg] 中) 則它就代表連字符 之前的一個(gè)例子介紹了使用圓括號(hào)來創(chuàng)建一個(gè)子表達(dá)式 它們?cè)试S您通過輸入更替元字符來輸入可更替的選項(xiàng) 這些元字符由豎線 (|) 分開 例如 正規(guī)表達(dá)式 t(a|e|i)n 允許字母 t 和 n 之間的三種可能的字符更替 匹配模式包括如 tan ten tin 和 Pakistan 之類的字 但不包括 teen mountain 或 tune 作為另一種選擇 正規(guī)表達(dá)式 t(a|e|i)n 也可以表示為一個(gè)字符列表 t[aei]n 表 匯總了這些元字符 雖然存在更多的元字符 但這個(gè)簡(jiǎn)明的概述足夠用來理解這篇文章使用的正規(guī)表達(dá)式 REGEXP_LIKE 操作符 REGEXP_LIKE 操作符向您介紹在 Oracle 數(shù)據(jù)庫(kù)中使用時(shí)的正規(guī)表達(dá)式功能 表 列出了 REGEXP_LIKE 的語(yǔ)法 下面的 SQL 查詢的 WHERE 子句顯示了 REGEXP_LIKE 操作符 它在 ZIP 列中搜索滿足正規(guī)表達(dá)式 [^[:digit:]] 的模式 它將檢索 ZIPCODE 表中的那些 ZIP 列值包含了任意非數(shù)字字符的行 SELECT zipFROM zipcodeWHERE REGEXP_LIKE(zip [^[:digit:]] )ZIP ab xy ababcxy 這個(gè)正規(guī)表達(dá)式的例子僅由元字符組成 更具體來講是被冒號(hào)和方括號(hào)分隔的 POSIX 字符類 digit 第二組方括號(hào)(如 [^[:digit:]] 中所示)包括了一個(gè)字符類列表 如前文所述 需要這樣做是因?yàn)槟豢梢詫?POSIX 字符類用于構(gòu)建一個(gè)字符列表 REGEXP_INSTR 函數(shù) 這個(gè)函數(shù)返回一個(gè)模式的起始位置 因此它的功能非常類似于 INSTR 函數(shù) 新的 REGEXP_INSTR 函數(shù)的語(yǔ)法在表 中給出 這兩個(gè)函數(shù)之間的主要區(qū)別是 REGEXP_INSTR 讓您指定一種模式 而不是一個(gè)特定的搜索字符串 因而它提供了更多的功能 接下來的示例使用 REGEXP_INSTR 來返回字符串 Joe Smith Berry Lane San Joseph CA 中的五位郵政編碼模式的起始位置 如果正規(guī)表達(dá)式被寫為 [[:digit:]]{ } 則您將得到門牌號(hào)的起始位置而不是郵政編碼的 因?yàn)?是第一次出現(xiàn)五個(gè)連續(xù)數(shù)字 因此 您必須將表達(dá)式定位到該行的末尾 正如 $ 元字符所示 該函數(shù)將顯示郵政編碼的起始位置 而不管門牌號(hào)的數(shù)字個(gè)數(shù) SELECT REGEXP_INSTR( Joe Smith Berry Lane San Joseph CA [[:digit:]]{ }$ )AS rx_instrFROM dualRX_INSTR 編寫更復(fù)雜的模式 讓我們?cè)谇耙粋€(gè)例子的郵政編碼模式上展開 以便包含一個(gè)可選的四位數(shù)字模式 您的模式現(xiàn)在可能看起來像這樣 [[:digit:]]{ }( [[:digit:]]{ })?$ 如果您的源字符串以 位郵政編碼或 位 + 位郵政編碼的格式結(jié)束 則您將能夠顯示該模式的起始位置 SELECT REGEXP_INSTR( Joe Smith Berry Lane San Joseph CA [[:digit:]]{ }( [[:digit:]]{ })?$ )AS starts_atFROM dualSTARTS_AT 在這個(gè)示例中 括弧里的子表達(dá)式 ( [[:digit:]]{ }) 將按 ? 重復(fù)操作符的指示重復(fù)零次或一次 此外 企圖用傳統(tǒng)的 SQL 函數(shù)來實(shí)現(xiàn)相同的結(jié)果甚至對(duì) SQL 專家也是一個(gè)挑戰(zhàn) 為了更好地說明這個(gè)正規(guī)表達(dá)式示例的不同組成部分 表 包含了一個(gè)對(duì)單個(gè)文字和元字符的描述 REGEXP_SUBSTR 函數(shù) ·?sup ;£àà??óú SUBSTR 函數(shù)的 REGEXP_SUBSTR 函數(shù)用來提取一個(gè)字符串的一部分 表 顯示了這個(gè)新函數(shù)的語(yǔ)法 在下面的示例中 匹配模式 [^ ]* 的字符串將被返回 該正規(guī)表達(dá)式搜索其后緊跟著空格的一個(gè)逗號(hào) 然后按 [^ ]* 的指示搜索零個(gè)或更多個(gè)不是逗號(hào)的字符 最后查找另一個(gè)逗號(hào) 這種模式看起來有點(diǎn)像一個(gè)用逗號(hào)分隔的值字符串 SELECT REGEXP_SUBSTR( first field second field third field [^ ]* )FROM dualREGEXP_SUBSTR( FIR second field REGEXP_REPLACE 函數(shù) 讓我們首先看一下傳統(tǒng)的 REPLACE SQL 函數(shù) 它把一個(gè)字符串用另一個(gè)字符串來替換 假設(shè)您的數(shù)據(jù)在正文中有不必要的空格 您希望用單個(gè)空格來替換它們 利用 REPLACE 函數(shù) 您需要準(zhǔn)確地列出您要替換多少個(gè)空格 然而 多余空格的數(shù)目在正文的各處可能不是相同的 下面的示例在 Joe 和 Smith 之間有三個(gè)空格 REPLACE 函數(shù)的參數(shù)指定要用一個(gè)空格來替換兩個(gè)空格 在這種情況下 結(jié)果在原來的字符串的 Joe 和 Smith 之間留下了一個(gè)額外的空格 SELEC lishixinzhi/Article/program/Oracle/201311/18225

oracle SQL 正則表達(dá)式

用 Oracle Database 10g 使用正規(guī)表達(dá)式

您可以使用最新引進(jìn)的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函數(shù)來發(fā)揮正規(guī)表達(dá)式的作用。您將體會(huì)到這個(gè)新的功能如何對(duì) LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函數(shù)進(jìn)行了補(bǔ)充。實(shí)際上,它們類似于已有的操作符,但現(xiàn)在增加了強(qiáng)大的模式匹配功能。被搜索的數(shù)據(jù)可以是簡(jiǎn)單的字符串或是存儲(chǔ)在數(shù)據(jù)庫(kù)字符列中的大量文本。正規(guī)表達(dá)式讓您能夠以一種您以前從未想過的方式來搜索、替換和驗(yàn)證數(shù)據(jù),并提供高度的靈活性。

正規(guī)表達(dá)式的基本例子

在使用這個(gè)新功能之前,您需要了解一些元字符的含義。句號(hào) (.) 匹配一個(gè)正規(guī)表達(dá)式中的任意字符(除了換行符)。例如,正規(guī)表達(dá)式 a.b 匹配的字符串中首先包含字母 a,接著是其它任意單個(gè)字符(除了換行符),再接著是字母 b。字符串 axb、xaybx 和 abba 都與之匹配,因?yàn)樵谧址须[藏了這種模式。如果您想要精確地匹配以 a 開頭和以 b 結(jié)尾的一條三個(gè)字母的字符串,則您必須對(duì)正規(guī)表達(dá)式進(jìn)行定位。脫字符號(hào) (^) 元字符指示一行的開始,而美元符號(hào) ($) 指示一行的結(jié)尾(參見表1:附表見第4頁(yè))。因此, 正規(guī)表達(dá)式 ^a.b$ 匹配字符串 aab、abb 或 axb。將這種方式與 LIKE 操作符提供的類似的模式匹配 a_b 相比較,其中 (_) 是單字符通配符。

默認(rèn)情況下,一個(gè)正規(guī)表達(dá)式中的一個(gè)單獨(dú)的字符或字符列表只匹配一次。為了指示在一個(gè)正規(guī)表達(dá)式中多次出現(xiàn)的一個(gè)字符,您可以使用一個(gè)量詞,它也被稱為重復(fù)操作符。.如果您想要得到從字母 a 開始并以字母 b 結(jié)束的匹配模式,則您的正規(guī)表達(dá)式看起來像這樣:^a.*b$。* 元字符重復(fù)前面的元字符 (.) 指示的匹配零次、一次或更多次。LIKE 操作符的等價(jià)的模式是 a%b,其中用百分號(hào) (%) 來指示任意字符出現(xiàn)零次、一次或多次。

表 2 給出了重復(fù)操作符的完整列表。注意它包含了特殊的重復(fù)選項(xiàng),它們實(shí)現(xiàn)了比現(xiàn)有的 LIKE 通配符更大的靈活性。如果您用圓括號(hào)括住一個(gè)表達(dá)式,這將有效地創(chuàng)建一個(gè)可以重復(fù)一定次數(shù)的子表達(dá)式。例如,正規(guī)表達(dá)式 b(an)*a 匹配 ba、bana、banana、yourbananasplit 等。僅供參考!

Oracle正則表達(dá)式

Oracle g數(shù)據(jù)庫(kù)內(nèi)建了符合IEEE POSIX (Portable Operating System for Unix)標(biāo)準(zhǔn)的正則表達(dá)式 熟練使用正則表達(dá)式 可以寫出簡(jiǎn)潔 強(qiáng)大的SQL語(yǔ)句

正則表達(dá)式有幾個(gè)優(yōu)點(diǎn)優(yōu)于常見的LIKE操作符和INSTR SUBSTR及REPLACE 函數(shù)的 這些傳統(tǒng)的SQL 函數(shù)不便于進(jìn)行模式匹配 只有LIKE 操作符通過使用%和_字符匹配 但LIKE不支持表達(dá)式的重復(fù) 復(fù)雜的更替 字符范圍 字符列表和POSIX 字符類等等

元字符(Meta Character)

Sql代碼

^??????????? 使表達(dá)式定位至一行的開頭

$??????????? 使表達(dá)式定位至一行的末尾

*??????????? 匹配 次或更多次

???????????? 匹配 次或 次

+??????????? 匹配 次或更多次

{m}????????? 正好匹配 m 次

{m }???????? 至少匹配 m 次

{m n}?????? 至少匹配 m 次但不超過 n 次

[:alpha:]??? 字母字符

[:lower:]??? 小寫字母字符

[:upper:]??? 大寫字母字符

[:digit:]??? 數(shù)字

[:alnum:]??? 字母數(shù)字字符

[:space:]??? 空白字符(禁止打印) 如回車符 換行符 豎直制表符和換頁(yè)符[:punct:]??? 標(biāo)點(diǎn)字符

[:cntrl:]??? 控制字符(禁止打?。?/p>

[:print:]??? 可打印字符 | 分隔替換選項(xiàng) 通常與分組操作符 () 一起使用

( )????????? 將子表達(dá)式分組為一個(gè)替換單元 量詞單元或后向引用單元

[char]?????? 字符列表

Oracle g提供了四個(gè)regexp function: REGEXP_LIKE REGEXP_REPLACE REGEXP_INSTR REGEXP_SUBSTR

Sql代碼

REGEXP_LIKE 比較一個(gè)字符串是否與正則表達(dá)式匹配

(srcstr pattern [ match_option])

REGEXP_INSTR 在字符串中查找正則表達(dá)式 并且返回匹配的位置

(srcstr pattern [ position [ occurrence [ return_option [ match_option]]]])

REGEXP_SUBSTR 返回與正則表達(dá)式匹配的子字符串

(srcstr pattern [ position [ occurrence [ match_option]]])

REGEXP_REPLACE 搜索并且替換匹配的正則表達(dá)式

(srcstr pattern [ replacestr [ position [ occurrence [ match_option]]]])? 其中各參數(shù)的含義為:

Sql代碼

srcstr:??????? 被查找的字符數(shù)據(jù)

pattern:?????? 正則表達(dá)式

occurrence:??? 出現(xiàn)的次數(shù) 默認(rèn)為

position:????? 開始位置

return_option: 默認(rèn)值為 返回該模式的起始位置 值為 則返回符合匹配條件的下一個(gè)字符的起始位置

replacestr:??? 用來替換匹配模式的字符串

match_option:? 匹配方式選項(xiàng) 缺省為c

c case sensitive

I case insensitive

n ( )匹配任何字符(包括newline)

m 字符串存在換行的時(shí)候被作為多行處理

下面通過一些具體的例子來說明如何使用這四個(gè)函數(shù) 首先創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)表

Sql代碼

SQL create table person (

first_name varchar( )

last_name varchar( )

email varchar( )

zip varchar( ));

Table created

SQL insert into person values ( Steven Chen );

row created

SQL insert into person values ( James Li || chr( ) || b d f );

row created

SQL mit;

Commit plete

SQL select * from person;

FIRST_NAME LAST_NAME? EMAIL??????????????? ZIP

Steven???? Chen?????? ???????

James????? Li???????? ????? b d f

REGEXP_LIKE

Sql代碼

SQL select zip as invalid_zip from person where regexp_like(zip [^[:digit:]] );

INVALID_ZIP

b d f

SQL select first_name from person where regexp_like(first_name ^S *n$ );

FIRST_NAME

Steven

SQL select first_name from person where regexp_like(first_name ^s *n$ );

no rows selected

SQL select first_name from person where regexp_like(first_name ^s *n$ c );

no rows selected

SQL select first_name from person where regexp_like(first_name ^s *n$ i );

FIRST_NAME

Steven

SQL select email from person where regexp_like(email ^james *$ );

no rows selected

SQL select email from person where regexp_like(email ^james *$ n );

EMAIL

SQL select email from person where regexp_like(email ^li *$ );

no rows selected

SQL select email from person where regexp_like(email ^li *$ m );

EMAIL

REGEXP_INSTR

Sql代碼

查找zip中第一個(gè)非數(shù)字字符的位置

SQL select regexp_instr(zip [^[:digit:]] ) as position from person;

POSITION

從第三個(gè)字符開始 查找zip中第二個(gè)非數(shù)字字符的位置

SQL select regexp_instr(zip [^[:digit:]] ) as position from person;

POSITION

從第三個(gè)字符開始 查找zip中第二個(gè)非數(shù)字字符的下一個(gè)字符位置

SQL select regexp_instr(zip [^[:digit:]] ) as position from person;

POSITION

REGEXP_SUBSTR

Sql代碼

SQL select regexp_substr(zip [^[:digit:]] ) as zip from person;

ZIP

b

SQL select regexp_substr(zip [^[:digit:]] ) as zip from person;

ZIP

f

REGEXP_REPLACE

Sql代碼

把zip中所有非數(shù)字字符替換為

SQL update person set zip=regexp_replace(zip [^[:digit:]] )

where regexp_like(zip [^[:digit:]] );

row updated

SQL select zip from person;

ZIP

后向引用(backreference)

后向引用是 一個(gè)很有用的特性 它能夠把子表達(dá)式的匹配部分保存在臨時(shí)緩沖區(qū)中 供以后重用 緩沖區(qū)從左至右進(jìn)行編號(hào) 并利用 \digit 符號(hào)進(jìn)行訪問 子表達(dá)式用一組圓括號(hào)來顯示 利用后向引用可以實(shí)現(xiàn)較復(fù)雜的替換功能

Sql代碼

SQL select regexp_replace( Steven Chen ( *) ( *) \ \ ) as reversed_name from dual;

REVERSED_NAME

Chen Steven

在DDL中也可以正則表達(dá)式 比如Constraint index view

Sql代碼

SQL alter table person add constraint constraint_zip check (regexp_like(zip ^[[:digit:]]+$ ));

lishixinzhi/Article/program/Oracle/201311/18745


文章標(biāo)題:oracle表達(dá)式怎么用 oracle函數(shù)怎么用
本文URL:http://weahome.cn/article/hggisp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部