當前位置:首頁 » 編程語言 » sqloracle表達式
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sqloracle表達式

發布時間: 2023-04-14 21:01:31

『壹』 Oracle sql 不是group by 表達式

看伏碼提示和單行行數,燃讓你用的oracle資料庫把,對於oracle聚合函數,以你這個sql為皮廳局例子,應該在group by後加上sex,work_location, trunc(last_login)
也就是select count(*),sex,work_location,trunc(last_login) from user_info group by trunc(last_login),sex,work_location,

『貳』 在oracle sql語句里有沒有if...else...的用法,請各位大俠給個例子看看,灰常感謝!!

oracle 中if ..else 可以再pl/sql 中使用,
如果是要在SQL語句中達到這種效果可以用case when ... then ...else ..end;
mysql資料庫中CASE WHEN語句。

case when語句,用於計算條件列表並返回多個可能結果表達式之一。

CASE 具有兩種格式:

簡單 CASE 函數將某個表達式與一組簡單表達式進行比較以確定結果。

CASE 搜索函數計算一組布爾表達式以確定結果。
兩種格式都支持可選的 ELSE 參數。

語法
簡單 CASE 函數:

復制代碼 代碼如下:

CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END

CASE 搜索函數:

復制代碼 代碼如下:

CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END

參數
input_expression

是使用簡單 CASE 格式時所計算的表達式。Input_expression 是任何有效的 Microsoft? SQL Server? 表達式。

WHEN when_expression

使用簡單 CASE 格式時 input_expression 所比較的簡單表達式。When_expression 是任意有效的 SQL
Server 表達式。Input_expression 和每個 when_expression 的數據類型必須相同,或者是隱性轉換。

佔位符,表明可以使用多個 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

THEN result_expression

當 input_expression = when_expression 取值為 TRUE,或者 Boolean_expression 取值為 TRUE 時返回的表達式。
result expression 是任意有效的 SQL Server 表達式。

ELSE else_result_expression

當比較運算取值不為 TRUE 時返回的表達式。如果省略此參數並且比較運算取值不為 TRUE,CASE 將返回 NULL
值。Else_result_expression 是任意有效的 SQL Server 表達式。Else_result_expression
和所有 result_expression 的數據類型必須相同,或者必須是隱性轉換。

WHEN Boolean_expression

使用 CASE 搜索格式時所計算的布爾表達式。Boolean_expression 是任意有效的布爾表達式。

結果類型

從 result_expressions 和可選 else_result_expression 的類型集合中返回最高的優先規則類型。有關更多信息,請參見數據類型的優先順序。

結果值

簡單 CASE 函數:
計算 input_expression,然後按指定順序對每個 WHEN 子句的 input_expression = when_expression 進行計算。

返回第一個取值為 TRUE 的 (input_expression = when_expression) 的 result_expression。

如果沒有取值為 TRUE 的 input_expression = when_expression,則當指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。
CASE 搜索函數:
按指定順序為每個 WHEN 子句的 Boolean_expression 求值。

返回第一個取值為 TRUE 的 Boolean_expression 的 result_expression。

如果沒有取值為 TRUE 的 Boolean_expression,則當指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。

下面分享一些mysql case when語句的例子。

A. 使用帶有簡單 CASE 函數的 SELECT 語句
在 SELECT 語句中,簡單 CASE 函數僅檢查是否相等,而不進行其它比較。

例子,使用 CASE 函數更改圖書分類顯示。

復制代碼 代碼如下:

USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
ELSE 'Not yet categorized'
END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL
ORDER BY type, price
COMPUTE AVG(price) BY type
GO

注釋,後來我試了一下不讓用category=。

我使用的代碼為:

復制代碼 代碼如下:

SELECT
case gender
WHEN 1 THEN 'NAN'
WHEN 0 THEN 'NV'
end as gender
FROM
t_swidy_day_nutrient

結果集:

Category Shortened Title Price
------------------- ------------------------- --------------------------
Business You Can Combat Computer S 2.99
Business Cooking with Computers: S 11.95
Business The Busy Executive's Data 19.99
Business Straight Talk About Compu 19.99

avg
==========================
13.73

Category Shortened Title Price
------------------- ------------------------- --------------------------
Modern Cooking The Gourmet Microwave 2.99
Modern Cooking Silicon Valley Gastronomi 19.99

avg
==========================
11.49

Category Shortened Title Price
------------------- ------------------------- --------------------------
Popular Computing Secrets of Silicon Valley 20.00
Popular Computing But Is It User Friendly? 22.95

avg
==========================
21.48

Category Shortened Title Price
------------------- ------------------------- --------------------------
Psychology Life Without Fear 7.00
Psychology Emotional Security: A New 7.99
Psychology Is Anger the Enemy? 10.95
Psychology Prolonged Data Deprivatio 19.99
Psychology Computer Phobic AND Non-P 21.59

avg
==========================
13.50

Category Shortened Title Price
------------------- ------------------------- --------------------------
Traditional Cooking Fifty Years in Buckingham 11.95
Traditional Cooking Sushi, Anyone? 14.99
Traditional Cooking Onions, Leeks, and Garlic 20.95

avg
==========================
15.96

(21 row(s) affected)

B. 使用帶有簡單 CASE 函數和 CASE 搜索函數的

SELECT 語句
在 SELECT 語句中,CASE 搜索函數允許根據比較值在結果集內對值進行替換。

例子:根據圖書的價格範圍將價格(money 列)顯示為文本注釋。

復制代碼 代碼如下:

USE pubs
GO
SELECT 'Price Category' =
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
ELSE 'Expensive book!'
END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO

結果集:

Price Category Shortened Title
--------------------- --------------------
Not yet priced Net Etiquette
Not yet priced The Psychology of Co
Very Reasonable Title The Gourmet Microwav
Very Reasonable Title You Can Combat Compu
Very Reasonable Title Life Without Fear
Very Reasonable Title Emotional Security:
Coffee Table Title Is Anger the Enemy?
Coffee Table Title Cooking with Compute
Coffee Table Title Fifty Years in Bucki
Coffee Table Title Sushi, Anyone?
Coffee Table Title Prolonged Data Depri
Coffee Table Title Silicon Valley Gastr
Coffee Table Title Straight Talk About
Coffee Table Title The Busy Executive's
Expensive book! Secrets of Silicon V
Expensive book! Onions, Leeks, and G
Expensive book! Computer Phobic And
Expensive book! But Is It User Frien

(18 row(s) affected)

C. 使用帶有 SUBSTRING 和 SELECT 的 CASE 函數

例子,使用 CASE 和 THEN 生成一個有關作者、圖書標識號和每個作者所著圖書類型的列表。

首先,來看下 CASE 的語法。在一般的 SELECT 中,其語法如下:

復制代碼 代碼如下:

SELECT <myColumnSpec> =
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END

以上代碼,需要用具體的參數代替尖括弧中的內容。

甚至還可以組合這些選項,添加一個 ORDER BY 子句,例如:

復制代碼 代碼如下:

USE pubs
GO
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range,
Title
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
GO

除了選擇自定義欄位之外,在很多情況下 CASE 都非常有用。

稍加深入,還可以得到以前認為不可能得到的分組排序結果集。
使用CASE WHEN進行字元串替換處理

在SELECT查詢中使用CASE WHEN

復制代碼 代碼如下:

/*
mysql> SELECT Name, RatingID AS Rating,
-> CASE RatingID
-> WHEN 'R' THEN 'Under 17 requires an alt.'
-> WHEN 'X' THEN 'No one 17 and under.'
-> WHEN 'NR' THEN 'Use discretion when renting.'
-> ELSE 'OK to rent to minors.'
-> END AS Policy
-> FROM DVDs
-> ORDER BY Name;
+-----------+--------+------------------------------+
| Name | Rating | Policy |
+-----------+--------+------------------------------+
| Africa | PG | OK to rent to minors. |
| Amadeus | PG | OK to rent to minors. |
| Christmas | NR | Use discretion when renting. |
| Doc | G | OK to rent to minors. |
| Falcon | NR | Use discretion when renting. |
| Mash | R | Under 17 requires an alt. |
| Show | NR | Use discretion when renting. |
| View | NR | Use discretion when renting. |
+-----------+--------+------------------------------+
8 rows in set (0.01 sec)
*/
Drop table DVDs;
CREATE TABLE DVDs (
ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(60) NOT NULL,
NumDisks TINYINT NOT NULL DEFAULT 1,
RatingID VARCHAR(4) NOT NULL,
StatID CHAR(3) NOT NULL
)
ENGINE=INNODB;
INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)
VALUES ('Christmas', 1, 'NR', 's1'),
('Doc', 1, 'G', 's2'),
('Africa', 1, 'PG', 's1'),
('Falcon', 1, 'NR', 's2'),
('Amadeus', 1, 'PG', 's2'),
('Show', 2, 'NR', 's2'),
('View', 1, 'NR', 's1'),
('Mash', 2, 'R', 's2');
SELECT Name, RatingID AS Rating,
CASE RatingID
WHEN 'R' THEN 'Under 17 requires an alt.'
WHEN 'X' THEN 'No one 17 and under.'
WHEN 'NR' THEN 'Use discretion when renting.'
ELSE 'OK to rent to minors.'
END AS Policy
FROM DVDs
ORDER BY Name;

『叄』 oracle sql 報錯:確實表達式,急!!!

UNION
SELECT ani, '兆襲4211' as skill, time_callstart as callenterqueue, time_callend as callabandoned , queuetime
這樣改應該橋磨就好族消兄了

『肆』 在Oracle使用正規表達式編寫更好的SQL語句

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

『伍』 Oracle SQL 正則表達式求助

SELECT city_code FROM A
WHERE REGEXP_LIKE(city_code, '\d+')
AND
city_code <野坦> '5Y44' AND city_code <>薯脊叢 '數櫻0HJ7'
UNION
SELECT city_code FROM A
WHERE city_code = 'PLT'

『陸』 請大神解答下這句SQL語言在Oracle資料庫中為什麼會提示:缺失表達式

肯定的的,這里的<emp.deptno = dept.deptno>
<>資料庫不認識(sql語句認為這是小於號和大於號,不認為是括弧,sql中的括弧是())。join也不是這么寫的,是left join,right join,inner join 中的一種。還有一種cross join(這種是笛卡兒積,用的更少,我就用過一回)
有一種簡單寫法
用where
select ename,dname from emp,dept where emp.deptno = dept.deptno
左右連接也可以用where實現,不過寫法並不是完全的sql規范,可能是oracle專有的。有興趣可以查詢一下。

『柒』 oracle SQL 正則表達式

正則表達式已經在很多軟體中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統,PHP,C#,Java等開發環境。
本文主要介紹了關於Oracle中正則表達式的使用方法,下面話不多說了,來一起看看詳細的介紹。
Oracle使用正則表達式離不開這4個函數:regexp_like、regexp_substr、regexp_instr、regexp_replace。
1、regexp_like
該函數只能用於條件表達式,和 like 類似,但是使用的正則表達式進行匹配
2、regexp_substr
該函數和 substr 類似,用於拾取合符正則表達式描述的字元子串
3、regexp_instr
該函數和 instr 類似,用於標定符合正則表達式的字元子串的開始位置
4、regexp_replace
該函數和 replace 類似,用於替換符合正則表達式的字元串

『捌』 Oracle SQL語句實現按條件表達式更新列數據

為什麼飢嘩要用1條語句實現??
你的條件沒有規律啊,肯定爛橋行要把條件給窮舉出來寫更新啊

update tab1

set col_length=1

where length(col_number)=4
update tab1

set col_length=2

where length(col_number)=6
update tab1

set col_length=3

where length(col_number)=8
update tab1

set col_length=4

where length(col_number)>8

要麼你定義一個function : f(len) ,這個公式的作用是:
判斷輸入是4 就輸出1,輸入6就輸出2,輸入8就輸出3,輸入>8就輸出4
然後你的update 語句就變成
update tab1

set col_length=f(length(col_number))

怎麼樣?給個消慧分吧~

『玖』 oracle 的正則表達式

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

oracle的正則表達式(regular expression)簡單介紹
目前,正則表達式已經在很多軟體中得到廣泛的應用,包括*nix(Linux, Unix等),HP等操作系統,PHP,C#,Java等開發環境。
Oracle 10g正則表達式提高了SQL靈活性。有效的解決了數據有效性,重復詞的辨認, 無關的空白檢測,或者分解多個正則組成的字元串等問題。
Oracle 10g支持正則表達式的四個新函數分別是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。
它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字元。
特殊字元:
'^' 匹配輸入字元串的開始位置,在方括弧表達式中使用,此時它表示不接受該字元集合。
'$' 匹配輸入字元串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或'\r'。
'.' 匹配除換行符 \n之外的任何單字元。
'?' 匹配前面的子表達式零次或一次。
'*' 匹配前面的子表達式零次或多次。
'+' 匹配前面的子表達式一次或多次。
'( )' 標記一個子表達式的開始和結束位置。
'[]' 標記一個中括弧表達式。
'{m,n}' 一個精確地出現次數范圍,m=<出現次數<=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。
'|' 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的字元串。
\num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。
正則表達式的一個很有用的特點是可以保存子表達式以後使用,被稱為Backreferencing. 允許復雜的替換能力
如調整一個模式到新的位置或者指示被代替的字元或者單詞的位置. 被匹配的子表達式存儲在臨時緩沖區

中,緩沖區從左到右編號, 通過\數字元號訪問。 下面的例子列出了把名字 aa bb cc 變成cc, bb, aa.
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM al;
REGEXP_REPLACE('ELLENHILDISMIT
cc, bb, aa
'\' 轉義符。
字元簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字元。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[unct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]。
各種操作符的運算優先順序
\ 轉義符
(), (?, (?=), [] 圓括弧和方括弧
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, \anymetacharacter 位置和順序
| 「或」操作
--測試數據
create table test(mc varchar2(60));
insert into test values('112233445566778899');
insert into test values('2344 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 plicate 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 al;
Select REGEXP_REPLACE('aa bb cc','(.*) (.*) (.*)', '\3, \2, \1') FROM al;

『拾』 oracle的sql的乘法運算方式

以下是運算方式