天天看點

關于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函數

 文法

LOCATE( string-expression-1, string-expression-2 [, integer-expression ] )      
關于locate函數

 參數

  • string-expression-1   被搜尋的字元串。
  • string-expression-2   要搜尋的字元串。此字元串的長度不應超過 255 個位元組。
  • integer-expression   字元串中開始進行搜尋的字元位置。第一個字元在位置 1。如果起始偏移是負值,則定位函數傳回最後一個比對字元串偏移而非第一個。負的偏移訓示從搜尋中排除字元串尾的多長一部分。排除的位元組數計算公式為 (-1 * 偏移) -1。
關于locate函數

 傳回值

INT

關于locate函數

 注釋

如果指定了 integer-expression,則從字元串中的該偏移處開始搜尋。

第一個字元串可以是長字元串(長于 255 個位元組),但第二個字元串的長度不能超過 255 個位元組。如果第二個參數是長字元串,此函數傳回 NULL 值。如果未找到字元串,則傳回 0。搜尋零長度字元串将傳回 1。如果有某個參數為 NULL,則結果為 NULL。

如果使用多位元組字元,并具有适當的歸類,則開始位置和傳回值可能不同于位元組 的位置。

此函數支援 NCHAR 輸入和/或輸出。

關于locate函數

 另請參見

  • 字元串函數
  • CHARINDEX 函數 [String]
關于locate函數

 标準和相容性

  • SQL/2008   服務商擴充。
關于locate函數

 示例

以下語句傳回值 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:\test\functions\locate.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:\test\functions\locate.sql 18 c:\test\functions locate.sql