koreyoshi 发表于 2013-1-13 18:08:45

关于locate函数

由于公司最近将oracle项目移植到db2 中间出现了很多兼容性问题,这里主要记录下hibernate中模糊查询的兼容性问题
 
例子(hql):from table t where t.name like '%' || t.displayName || '%';
 
如果遇到这种情况,在oracle里面是完美兼容,到了db2就出问题了
 
解决方案:使用locate函数,上面这种情况可以修改成如下
     from table t where locate(t.dispalyName,t.name)>0;//这里等于1就等同于上面sql语句的结果
     from table t where locate(t.dispalyName,t.name)=1;,//1就是在name中从第一位开始匹配displayName
     from table t where locate(t.dispalyName,t.name)=0;//等于0的结果是排除模糊匹配到的结果,也就是查出匹     配不到的所有数据;
     from table t where locate(t.dispalyName,t.name)=2;//2就是在t.name中从第二位开始匹配dispalyName;
     接下来=3,4,5,6相信大家都理解了.
 
locate(String param1,String param2,int param3)  从param2的第param3位置开始,返回param1第一次出现的位置,param3为负数的情况暂时还没去研究.
 
 
 
hibernate中使用locate会根据你配置的不同方言去解析对应的函数
注意:oracle中locate的参数是反的!!!!
在oracle中要达到上面例子的结果要这样写:from table t where locate(t.name,t.dispalyName)=1;
 
 
下面是官方实例(可以参考):
 
 
 
<div class="titlepage" style=""><div style="margin: 0pt;"><div style="margin: 0pt;">LOCATE 函数
页: [1]
查看完整版本: 关于locate函数