mysql与oracle like小知识

来源:互联网 发布:新闻英语听力训练软件 编辑:程序博客网 时间:2024/06/05 03:13
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



原创粉丝点击