关于locate函数

这篇博客讲述了在将Oracle项目移植到DB2时,遇到的Hibernate模糊查询兼容性问题。文章重点讨论了 Locate 函数的使用,特别是在Oracle和DB2中的差异。提供了解决方案,即利用Locate函数调整HQL查询,以适应不同的数据库方言。还介绍了Locate函数的语法、参数、返回值以及示例,强调在Oracle中参数顺序与DB2不同,开发者需要注意这一点。
摘要由CSDN通过智能技术生成

由于公司最近将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;

 

 

下面是官方实例(可以参考):

 

 

 

LOCATE 函数 [String]

返回一个字符串在另一个字符串中的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值