测试数据如下:
create table my_test
(
id int,
name varchar2(20)
);
insert into my_test (id, name) values (1, 'a''b123');
insert into my_test (id, name) values (2, 'a_b456');
insert into my_test (id, name) values (3, 'a%b789');
1、查询值包含单引号,比如查询 a'b123
-- 包含单引号'时,需要使用单引号转义
-- 错误写法如下:
-- select id,name from my_test where name = 'a'b123'
-- 正确写法如下:
select id,name from my_test where name = 'a''b123'
java 代码操作如下:
String value = "a'b123";
// 转义
value = value.replace("'", "''");
String sql = "select id,name from my_test where name = '" + value + "'";
2、like查询值包含_ 比如模糊查询 a_b
SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符。需要使用escape指定转义符。
-- SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符。需要使用escape指定转义符。
-- 错误写法如下:
-- select id,name from my_test where name like '%a_b%'
-- 正确写法如下:
select id,name from my_test where name like '%a\_b%' escape '\'
-- 正确写法(Java字符串还需要对\转义)如下
-- String sql = "select id,name from my_test where name like '%a\\_b%' escape '\\'";
Java代码如下:
String value = "a_b";
// 转义
value = value.replace("'", "''");
// like模糊查询escape转义
value = value.replace("_", "\\_");
value = value.replace("%", "\\%");
String sql = "select id,name from my_test where name like '%" + value + "%' escape '\\' ";
3、like查询值包含% 比如模糊查询 a%b
-- SQL LIKE里查询有下划线'_'或是'%'等值的记录,直接写成like 'XXX_XX',则会把'_'当成是like的通配符。需要使用escape指定转义符。
-- 错误写法如下:
-- select id,name from my_test where name like '%a%b%'
-- 正确写法如下:
select id,name from my_test where name like '%a\%b%' escape '\'
-- 正确写法(Java字符串还需要对\转义)如下
-- String sql = "select id,name from my_test where name like '%a\\%b%' escape '\\'";
java代码如下:
String value = "a%b";
// 转义
value = value.replace("'", "''");
// like模糊查询escape转义
value = value.replace("_", "\\_");
value = value.replace("%", "\\%");
String sql = "select id,name from my_test where name like '%" + value + "%' escape '\\' ";
Oracle数据库,不包含、不等于 都会将空的剔除(空值都会被视为不满足条件)。