#### 1. find_in_set() 用于在多個(gè)字符串子鏈中查詢字符串 --- ```sql find_in_set(str, strlist) ``` str: 要查詢的字符串 strlist: 字段名或字符串, 多個(gè)子鏈以英文逗號(hào) `分割 返回值: 假如字符串 str 在由 N 個(gè)子鏈組成的字符串列表 strlist 中,則返回值的范圍在 1 到 N 之間, 不在 strlist 中則返回 0 以下示例中返回值則為: 3 , 因?yàn)樽址?**yang** 在第三個(gè)子鏈中 ```sql select find_in_set('yang', 'liang,chen,yang'); ``` 應(yīng)用場(chǎng)景: 在文章表 article 中有個(gè)標(biāo)簽字段 tags,一個(gè)文章可以有多個(gè)標(biāo)簽 標(biāo)簽 id: 1 html 2 css 3 javascript, tags 以 1,2,3 的格式存儲(chǔ)標(biāo)簽,那么我們可以使用 find_in_set 查找出 tags 中有 1 的標(biāo)簽 ```sql select * from article where find_in_set(1, `tags`); ``` 在 ThinkPHP 6 中可以使用查詢表達(dá)式(TP6中的新增的,之前版本不可用) ``` User::whereFindInSet('shop_ids', 1)->select(); ``` 生成的SQL語(yǔ)句為 ```sql SELECT * FROM `user` WHERE FIND_IN_SET(1, `shop_ids`); ``` #### 2. instr() 用于在字符串中查詢子字符串 --- 用于在字符串中查詢子字符串, 返回子字符串在字符串中首次出現(xiàn)的位置(下標(biāo)從 1 開(kāi)始);如果沒(méi)有找到,則返回 0 ```sql select * from `article` where instr(`tags`, 2); select * from `article` where `tags` like '%2%'; ```