牛骨文教育服务平台(让学习变的简单)
博文笔记

db2中like使用locate函数情况及解析

创建时间:2016-09-07 投稿人: 浏览次数:3240

转载自:关于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;

 

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


LOCATE 函数 [String]

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

 语法
LOCATE( string-expression-1, string-expression-2 [, integer-expression ] )
 参数
  • string-expression-1   被搜索的字符串。

  • string-expression-2   要搜索的字符串。此字符串的长度不应超过 255 个字节。

  • integer-expression   字符串中开始进行搜索的字符位置。第一个字符在位置 1。如果起始偏移是负值,则定位函数返回最后一个匹配字符串偏移而非第一个。负的偏移指示从搜索中排除字符串尾的多长一部分。排除的字节数计算公式为 (-1 * 偏移) -1。

 返回值

INT

 注释

如果指定了 integer-expression,则从字符串中的该偏移处开始搜索。

第一个字符串可以是长字符串(长于 255 个字节),但第二个字符串的长度不能超过 255 个字节。如果第二个参数是长字符串,此函数返回 NULL 值。如果未找到字符串,则返回 0。搜索零长度字符串将返回 1。如果有某个参数为 NULL,则结果为 NULL。

如果使用多字节字符,并具有适当的归类,则开始位置和返回值可能不同于字节 的位置。

此函数支持 NCHAR 输入和/或输出。

 另请参见
  • 字符串函数
  • CHARINDEX 函数 [String]
 标准和兼容性
  • SQL/2008   服务商扩充。

 示例

以下语句返回值 8。

 
SELECT LOCATE(
   "office party this week - rsvp as soon as possible",
   "party",
   2 );

以下语句

 
BEGIN
   DECLARE STR LONG VARCHAR;
   DECLARE POS INT;
   SET str = "c:	estfunctionslocate.sql";
   SET pos = LOCATE( str, "", -1 );
   select str, pos,
      SUBSTR( str, 1, pos -1 ) AS path,
      SUBSTR( str, pos +1 ) AS filename;
END;

返回以下输出:

str pos path filename
c: estfunctionslocate.sql 18 c: estfunctions locate.sql

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。