DB2中的like的使用是有限制的,它后面不能跟一個變量或者是字段,因此,在存儲過程或SQL語句中就不能like一個變量或一個字段。
比如有兩個表A(a,b,c,d),B(a,b,c,d)。
普遍的用法是:
select * from A where A.b like '%張%'
此語句在任何數據庫都是通用的,
但有時也遇到這種情況:
select A.a,B.b from A,B where A.d like B.d||'%'
此語句在oracle中執行沒有問題,但在db2中就不行,報以下錯誤:
SQL0132N LIKE 謂詞或 POSSTR 標量函數無效,因為第一個操作數不是字符串表達式或第二個操作數不是字符串。LOCATE 或 POSITION 標量函數無效,因為第一個操作數不是字符串,或者第二個操作數不是字符串表達式。
此種情況在db2中是使用locate函數,locate用法:
locate(arg1,arg2,pos),在org2中查找arg1第一次出現的位置,pos指明從哪個位置開始查找(省略則從開始查找),如果arg1不為null且查找不到
的話返回0,如果找到則返回大於0的數字。
對於語句:
select A.a,B.b from A,B where A.d like B.d||'%'
在db2中應該修改為:
select A.a,B.b from A,B where locate(B.d,A.d)>0