instr模糊查詢使用及注意事項


對應參數描述: 
instr('源字符串' , '目標字符串' ,'開始位置','第幾次出現'),返回目標字符串在源字符串中的位置。后面兩個參數可要可不要。
 

​instr('源字符串' , '目標字符串' ),  從開頭開始查找第一個‘  目標字符串  ’出現的位置 

1.結尾,網上有說這么寫的,但是在orcle下沒有問題,在mysql中是有問題的。
查詢最后一個
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘傑 ’) = LENGTH(字段名)
SELECT * FROM 用戶.表 WHERE 字段名 LIKE '%傑 ‘;
 
查詢最后兩個
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘邱天’) = LENGTH(字段名)-1
SELECT * FROM 用戶.表 WHERE 字段名 LIKE '%邱天‘;
上面兩個是相等的,不過第一個效率高 。

實際執行結果:
SELECT * 
FROM d_ebc_member 
WHERE 
INSTR(member_name,'傑') = (LENGTH(member_name));
 

換個SQl執行: 
 
SELECT * 
FROM d_ebc_member 
WHERE 
INSTR(member_name,'傑') = (LENGTH(member_name)-6);
 

按這個查詢在mysql里面是有問題的: 
第一:LENGTH()函數在mysql中取字節,因此每個漢子字要按三個字節計算。 
第二:instr取的是位置。 
SELECT * FROM 用戶.表 WHERE INSTR(字段名, ‘傑’,-1,1) = LENGTH(字段名) 
我覺得前半部分需要加上位置參數,才是表示從倒數第一個位置開始,第一次出現的位置, 
加上后報錯如下: 
incorrect parameter count in the call to native function 'instr' 
這是由於mysql和Orcle的不同造成的。
 
結論:
末尾查詢使用使用like或者其他,用instr無法實現末尾查詢
 
2.包含
SELECT * 
FROM d_ebc_member 
WHERE 
INSTR(member_name,'傑') > 0; 
 
SELECT * FROM 用戶.表 WHERE 字段名 LIKE '%傑 %‘;
 
3.開頭
SELECT * 
FROM d_ebc_member 
WHERE 
INSTR(member_name,'周') = 1; 
 
SELECT * FROM 用戶.表 WHERE 字段名 LIKE ‘周 %’;

4.not like
SELECT * 
FROM d_ebc_member 
WHERE 
INSTR(member_name,'周') = 0; 

SELECT * FROM 用戶.表 WHERE 字段名 not LIKE ‘%周%’;
 
SELECT * 
FROM d_ebc_member 
WHERE 
member_name 
NOT LIKE
'%周%'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM