mysql使用instr達到in 字串 的效果

2021-07-25 21:31:10 字數 1168 閱讀 8539

使用mysql遇到一種情況:

需要查出id在某乙個id拼接的字串中的記錄,這個時候用id in(id1,id2,...)行不通,因為in語法裡面的引數是數字型的,應該用instr語法,instr(idsstr,id)其中idsstr=『id1,id2,id3…』

下面舉例說明:

create table t_city (id int(10) ,name varchar(20));

insert into t_city values (1,'北京'),(2,'上海'),(3,'廣州'),(4,'深圳'),(5,'杭州'),(12,'武漢');

現在我需要查詢id在字串』1,2,3』裡的城市,但是用in語法是不行的,因為in語法的引數不是字串,可以用下面的方式來達到相同效果

結果正確。但是如果我要查詢id在字串』3,4,5,12』裡的城市,會發現結果出現偏差,查出了6個城市

原來是由於武漢的id為12,而北京id為1,上海的id為2,根據instr的語義, id=1或2或12都能查出來,所以修改一下查法

總結:此用法是對instr函式乙個偏門的使用,在某些特定的場合下,可以用來達到in函式的效果,但是存在一定的侷限性,比如要通過特殊字元使每個值構成唯一避免出現偏差,使用的時候要注意。

mysql使用instr達到in 字串 的效果

使用mysql遇到一種情況 需要查出id在某乙個id拼接的字串中的記錄,這個時候用id in id1,id2,行不通,因為in語法裡面的引數是數字型的,應該用instr語法,instr idsstr,id 其中idsstr id1,id2,id3 下面舉例說明 1 建表 create table t...

使用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 的第乙個位置開始,向後查詢第乙個出現子串 ...