Oracle 查詢不區分大小寫 (正則函數)

//不區分大小寫查詢 REGEXP_LIKE(字段名, '(" + keyword+ ")', 'i') " );
正則表達式

Oracle中的Like操做符使用'_'和'%'做爲通配符,使用就像這樣:
sql

SELECT name FROM test_like WHERE name like '_a%';

 即匹配test_like表name列中第2個字母是a的全部行。函數

可是注意,Oracle匹配時區分大小寫的。也就是說上面的查詢時沒法查詢到name='SAas'這行的。spa

Oracle10g中提供的正則表達式功能能夠很好的解決這個問題,固然這不是使用正則表達式函數的惟一優勢,實際上它比Like操做符強大的多。 正則表達式的語法就不用多說了,如今大多數語言都支持正則表達式了。 下面主要介紹下Oracle中正表達式函數REGEXP_LIKE的使用: REGEXP_LIKE(x, pattern [, match_option])    
.net

當源字符串x匹配正則表達式pattern時,返回true。可使用match_option修改默認匹配選項,該參數能夠被設置爲: 
code

  - 'c', 說明在進行匹配時區分大小寫(默認選項) 
regexp

- 'i', 說明在進行匹配時不區分大小寫 
blog

- 'n'   容許使用能夠匹配任意字符的操做符(一般是'.')  
字符串

- 'm', 將x做爲一個包含多行的字符串 
string

舉個例子:

SELECT * FROM test_reg WHERE REGEXP_LIKE(name, '(a)\1', 'i');

  上面的SQL語句匹配test_reg表中name列含有兩個連續字符'a'(不區分大小寫)的行,如name='SaAs'。此外,這裏咱們還使用了正則表達式中的後引用語法——\n表示重複n次上次匹配的內容,此處(a)\1表示匹配兩個連續的字符'a'。 須要注意的是,後引用必須使用雙括號,不然會出現以下結果: SELECT * FROM test_reg WHERE REGEXP_LIKE(name, 'a\1', 'i')       ORA-12727: 正則表達式中的後向引用無效   最後一點,不要混淆LIKE操做符的通配符和正則表達式的語法,也就是說不要再正則表達式中使用LIKE操做符中的通配符,若是這樣作會獲得未知的結果,由於'_'和'%'會被正則表達式當作普通字符進行匹配。 好比下面這條SQL想要獲得name='SaAs'這條記錄,但實際的查詢結果爲空。 SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name, '^_(a)\1', 'i');       NAME   ----------   實際應該使用: SQL> SELECT * FROM test_reg WHERE REGEXP_LIKE(name, '^.(a)\1', 'i');       NAME   ----------   SaAs  

Oracle使用正則表達式離不開這4個函數:

1。regexp_like

2。regexp_substr

3。regexp_instr

4。regexp_replace

看函數名稱大概就能猜到有什麼用了。

regexp_like 只能用於條件表達式,和 like 相似,可是使用的正則表達式進行匹配,語法很簡單: regexp_like_condition

regexp_substr 函數,和 substr 相似,用於拾取合符正則表達式描述的字符子串,語法以下: regexp_substr regexp_instr 函數,和 instr 相似,用於標定符合正則表達式的字符子串的開始位置,語法以下: regexp_instr

regexp_replace 函數,和 replace 相似,用於替換符合正則表達式的字符串,語法以下: regexp_replace

這裏解析一下幾個參數的含義:

1。source_char,輸入的字符串,能夠是列名或者字符串常量、變量。

2。pattern,正則表達式。

3。match_parameter,匹配選項。 取值範圍: i:大小寫不敏感; c:大小寫敏感;n:點號 . 不匹配換行符號;m:多行模式;x:擴展模式,忽略正則表達式中的空白字符。

4。position,標識從第幾個字符開始正則表達式匹配。

5。occurrence,標識第幾個匹配組。

6。replace_string,替換的字符串。

參考原文:http://blog.csdn.net/huaishuming/article/details/8983184

相關文章
相關標籤/搜索