Mysql 中 find_in_set() 與in、like的區別

原文鏈接:https://blog.csdn.net/qq_21870555/article/details/81025374

在本教程中,您將學習如何使用MySQL FIND_IN_SET()函數返回指定字符串在以逗號分隔的字符串列表中的位置。

 

MySQL FIND_IN_SET函數簡介
MySQL提供了一個名爲FIND_IN_SET()的內置字符串函數,允許您在逗號分隔的字符串列表中查找指定字符串的位置。

下面說明了FIND_IN_SET()函數的語法。

 FIND_IN_SET(needle,haystack);


FIND_IN_SET()函數接受兩個參數:

第一個參數needle是要查找的字符串。
第二個參數haystack是要搜索的逗號分隔的字符串列表。
FIND_IN_SET()函數根據參數的值返回一個整數或一個NULL值:

如果needle或haystack爲NULL,則函數返回NULL值。
如果needle不在haystack中,或者haystack是空字符串,則返回零。
如果needle在haystack中,則返回一個正整數。
請注意,如果needle包含逗號(,),該函數將無法正常工作。 此外,如果needle是一個常量字符串,而且haystack是一個類型爲SET的列,MySQL將使用位算術優化。

 

SQL 語句中的in、find_in_set、like的區別
1.in查詢相當於多個or條件的疊加,例如:

select * from user where user_id in (1,2,3);
等效於
select * from user where user_id = 1 or user_id = 2 or user_id = 3;
not in與in相反,如下
select * from user where user_id not in (1,2,3);
等效於
select * from user where user_id != 1 and user_id != 2 and user_id != 3;

2.find_in_set基本語法

FIND_IN_SET(str,strlist)

str 要查詢的字符串,strlist 字段名 參數以”,”分隔 如 (1,2,6,8)
如果str不在strlist 或strlist 爲空字符串,則返回值爲 0 。如任意一個參數爲NULL,則返回值爲 NULL。這個函數在第一個參數包含一個逗號(‘,’)時將無法正常運行。

+----+---------+-----------+-------------+
| id | user_id | follow_id | follow_time |
+----+---------+-----------+-------------+
| 13 | 15      | 16,15     |  1478096138 |
| 14 | 15      | 17        |  1478177725 |
| 15 | 15      | 19        |  1478181035 |
+----+---------+-----------+-------------+

比如這張表,SELECT * from test where FIND_IN_SET('5',follow_id);這樣是查不到的,返回值爲null,因爲follow_id中沒有”5”這個值,它不同於 like 模糊查詢,它是以“,”來分隔值

3.like是廣泛的模糊匹配,字符串中沒有分隔符,Find_IN_SET 是精確匹配,字段值以英文”,”分隔。
````````````
原文鏈接:https://blog.csdn.net/qq_21870555/article/details/81025374

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章