oracle转义问题,oracle like查询值转义

测试数据如下:

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数据库,不包含、不等于 都会将空的剔除(空值都会被视为不满足条件)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值