oracle 模糊查询 模糊大小写

我的模糊查询需求是不区分大小写. 查询1: select * from power p where p.subSystem like '%jz%' ; 无数据... 查询2: select * from power p where p.subSystem like '%JZ%' ; 有数据... 我数据表中 subSystem 字段中的字段中凡是有这个 'jz' 字母的都是大写,即'JZ_F23566' , 怎样在用户模糊查询的时候无论输入大写还是小写,都要可以查询出这些语句. 尽量不要 '双like' 的方式.

select * from power p where upper(p.subSystem) like '%JZ%' ;

或

select * from power p where lower(p.subSystem) like '%jz%' ;

upper是把所有字母转大写
lower是把所有字母转小写
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-01
oracle 严格区分大小写upper()这个函数就是用来写改小写为大写的我想你的程序肯定传了一个变量对吧 比如语句可能是 select * from power p where p.subSystem like '%'''+变量+'''%' ;如果是这样就用个upper()select * from power p where p.subSystem like '%upper('''+变量+''')%' ;
第2个回答  2013-04-01
SQL> CREATE TABLE tab (
2 id INT,
3 val VARCHAR2(10)
4 );

表已创建。

SQL> INSERT INTO tab
2 SELECT 1, 'ABC123' FROM DUAL UNION ALL
3 SELECT 2, 'abc234' FROM DUAL UNION ALL
4 SELECT 3, 'Abc345' FROM DUAL UNION ALL
5 SELECT 4, 'aBC456' FROM DUAL UNION ALL
6 SELECT 5, 'aBc567' FROM DUAL ;

已创建5行。

Oracle 默认,大小写敏感

SQL> SELECT
2 *
3 FROM
4 tab
5 WHERE
6 val LIKE 'a%';

ID VAL
---------- ----------
2 abc234
4 aBC456
5 aBc567

默认是大小写敏感。

解决办法,使用 正则表达式的方式来 变通的处理。

SQL> SELECT
2 *
3 FROM
4 tab
5 WHERE
6 REGEXP_LIKE (val, '^a', 'i');

ID VAL
---------- ----------
1 ABC123
2 abc234
3 Abc345
4 aBC456
5 aBc567

注1:REGEXP_LIKE 的第3个参数 'i' 表示大小写敏感。
注2:对于环境变量 NLS_COMP 与 NLS_SORT的设置,会影响REGEXP_LIKE 执行的结果(假如第3个参数不填写的话)。
第3个回答  2013-04-01
有两种方法可以:
1、
select * from power p where p.subSystem like '%jz%'
union all
select * from power p where p.subSystem like '%JZ%' ;
2、select * from power p where p.subSystem (like upper('%jz%') or like lower('%jz%') );
第4个回答  2013-04-01
select * from power where upper(subSystem) like '%'||upper(输入值)||'%' ;
相似回答