//不區分大小寫查詢 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