使用mysql遇到一種情況:
需要查出id在某乙個id拼接的字串中的記錄,這個時候用id in(id1,id2,…)行不通,因為in語法裡面的引數是數字型的,應該用instr語法,instr(idsstr,id)其中idsstr=』id1,id2,id3…』
下面舉例說明:
1 建表
create
table t_city (id int(10) ,name varchar(20));
insert
into t_city values (1,'北京'),(2,'上海'),(3,'廣州'),(4,'深圳'),(5,'杭州'),(12,'武漢');
2 查詢
現在我需要查詢id在字串』1,2,3』裡的城市,但是用in語法是不行的,因為in語法的引數不是字串,可以用下面的方式來達到相同效果
select * from t_city where instr('1,2,3',id);
select * from t_city where instr(id,'1,2,3');
結果正確。但是如果我要查詢id在字串』3,4,5,12』裡的城市,會發現結果出現偏差,查出了6個城市
select * from t_city where instr('3,4,5,12',id);
原來是由於武漢的id為12,而北京id為1,上海的id為2,根據instr的語義, id=1或2或12都能查出來,所以修改一下查法
select * from t_city where instr(concat(',','3,4,5,12',','),concat(',',id,','));
總結:
此用法很大侷限性的,只有在一些特殊情況才會用到,在這裡記錄一下。
mysql使用instr達到in 字串 的效果
使用mysql遇到一種情況 需要查出id在某乙個id拼接的字串中的記錄,這個時候用id in id1,id2,行不通,因為in語法裡面的引數是數字型的,應該用instr語法,instr idsstr,id 其中idsstr id1,id2,id3 下面舉例說明 create table t city...
使用INSTR替換mysql裡面的like
mysql裡面的like如果是左右模糊不可以使用索引導致查詢效率極低,這時候我們就可以使用orcal裡面的instr來處理使效率提高 這段sql是乙個左右模糊查詢 select from t case where name like concat 測試 使用instr來替代 select from ...
instr函式的使用
對於instr函式,我們經常這樣使用 從乙個字串中查詢指定子串的位置。例如 sql select instr yuechaotianyuechao ao position from dual position 6從字串 yuechaotianyuechao 的第乙個位置開始,向後查詢第乙個出現子串 ...