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