mysql与oracle like小知识

like -->模糊查询 -->后匹配走索引,前匹配不走索引

like "123%" -->走索引

like "%123" -->不走索引

like "%123%" -->不走索引

一般解决方案:

业务尽量避免,或采用搜索引擎


在ibatis或mybatis中,mysql与oracle的like语句不同:

oracle:

 一般使用||来拼接字符串,也可用concat,但是concat在oracle中只可连接2个字符串

 

select * from xxx where  

<isNotEmpty prepend="and"property="customerName">

             CUSTOMER_NAME  like '%'|| #customerName ||'%'                </isNotEmpty>

mysql:

一般使用caoncat,concat在mysql中可连接多个字符串

select * from xxx where 

<if test="buCode!=null andbuCode!=''">    

AND bu_codelike    CONCAT('%',#{buCode,jdbcType=VARCHAR},'%')

</if>

需注意的是:

1.oracle也可用CONCAT连接字符串的方式写like sql,但是concat在oracle中只支持拼接2个字符串,如需拼接多个,需自己内外嵌套拼接;

concat有 to_char的作用,就是把其他类型转成varchar类型的

2.||与concat的区别:显然易见,concat在oracle中可知拼接两个字符串,而||可拼接多个

重要

无论musql还是oracle写like语句都会遇到一个问题:

SELECT * FROM REV_PRICE_BILL WHERE price_name like '%_%';

此sql会查询出所有,price_name的条件无效

解决方案:

SELECT * FROM REV_PRICE_BILL WHERE price_name like '%' ||  '\_' || '%' ESCAPE '\';

使用ESCAPE定义转义字符,转义字符后的通配符作为普通字符串

ESCAPE使用详细参考:http://blog.csdn.net/david_520042/article/details/6909230


 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值