最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql如何匹配數(shù)組字段中的某一個(gè)具體值

 更新時(shí)間:2024年11月06日 09:13:54   作者:樘棣寂寂  
在數(shù)據(jù)庫(kù)操作中,有時(shí)需要查詢數(shù)組字段中包含特定值的數(shù)據(jù),傳統(tǒng)like查詢可能會(huì)帶來(lái)錯(cuò)誤結(jié)果,如查詢包含數(shù)字1的數(shù)組可能錯(cuò)誤返回包含數(shù)字10的結(jié)果,為此,可以使用MySQL的FIND_IN_SET函數(shù)或REGEXP正則表達(dá)式進(jìn)行精確匹配,FIND_IN_SET適用于匹配單個(gè)固定值

應(yīng)用背景

業(yè)務(wù)表中的某個(gè)字段存儲(chǔ)的值為數(shù)組,例如 1,2,3 。

現(xiàn)在需要查詢其中一個(gè)值是數(shù)組里面的對(duì)應(yīng)的一個(gè)值,該如何匹配。

就比如subject這個(gè)字段為一個(gè)數(shù)組,現(xiàn)在需要查詢subject包含1的學(xué)生。

使用模糊查詢的問(wèn)題

因?yàn)閟ubject里面存的不是具體的一個(gè)值,所以使用=顯然是不行的,這個(gè)時(shí)候大家首先會(huì)想到like的模糊查詢,我們一起來(lái)看看效果

SELECT
	* 
FROM
	`stu_c` 
WHERE
	subject LIKE '%1%'

執(zhí)行結(jié)果

可以看到將張三跟王五都查出來(lái)了,這顯然跟我們的需求不符,需求是只包含1的,應(yīng)該只查出來(lái)張三這條數(shù)據(jù)才對(duì)。

解決方案一

使用mysql中的FIND_IN_SET(str,fieldName)函數(shù),str是要查詢的字符串,fieldName是字段名,參數(shù)以“,”分隔,例如1,2,3

匹配單個(gè)(只包含1)sql語(yǔ)句如下

SELECT * FROM stu_c WHERE FIND_IN_SET('1', subject) > 0 

匹配單個(gè)(只包含1)執(zhí)行結(jié)果

查出了subject包含1的學(xué)生信息

匹配多個(gè)(包含1跟3)sql語(yǔ)句如下

SELECT * FROM stu_c
WHERE FIND_IN_SET('1', subject) > 0 OR FIND_IN_SET('3', subject) > 0;

匹配多個(gè)(包含1跟3)執(zhí)行結(jié)果

查出了subject包含1跟3的學(xué)生信息

解決方案二

使用REGEXP正則表達(dá)式匹配,REGEXP語(yǔ)法更加強(qiáng)大,功能更全,可以根據(jù)不同的需求選擇不同的用法,本文主要講查詢包含這個(gè)字符的數(shù)據(jù)

匹配單個(gè)(只包含1)sql語(yǔ)句如下

SELECT
	* 
FROM
	`stu_c` 
WHERE
	CONCAT ( ',', subject, ',' ) REGEXP ',(1),'

匹配單個(gè)(只包含1)執(zhí)行結(jié)果

查出了subject包含1的學(xué)生信息

匹配多個(gè)(包含1跟3)sql語(yǔ)句如下

SELECT
	* 
FROM
	`stu_c` 
WHERE
	CONCAT ( ',', subject, ',' ) REGEXP ',(1|3),'

匹配多個(gè)(包含1跟3)執(zhí)行結(jié)果

查出了subject包含1跟3的學(xué)生信息

總結(jié)

兩種方式都能解決匹配數(shù)組字段中某一個(gè)具體值的問(wèn)題,但是也有差異,有各自的優(yōu)缺點(diǎn),例如FIND_IN_SET(str,fieldName)函數(shù),如果前端頁(yè)面是多選項(xiàng),也就是需要匹配滿足多個(gè)值的情況,就需要使用or拼接sql,但是REGEXP只需要把參數(shù)轉(zhuǎn)換為我們需要的格式(',(1|3),')即可。

如果項(xiàng)目需求只需匹配一個(gè)值,F(xiàn)IND_IN_SET函數(shù)直接在xml中使用就行,REGEXP仍需要將單個(gè)參數(shù)轉(zhuǎn)換為特定的格式(,(1),)。

綜上所述,單個(gè)值匹配建議用FIND_IN_SET函數(shù),多個(gè)值匹配建議用REGEXP正則表達(dá)式。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

扎兰屯市| 新巴尔虎右旗| 菏泽市| 哈尔滨市| 鹤山市| 易门县| 普定县| 衡东县| 土默特右旗| 小金县| 浙江省| 乐清市| 西吉县| 邵阳市| 遵化市| 沾化县| 隆林| 新蔡县| 吉木萨尔县| 山东| 青田县| 游戏| 常州市| 西畴县| 井陉县| 九江县| 瓮安县| 肃南| 鄂托克旗| 枝江市| 衡山县| 珠海市| 南江县| 北碚区| 宜章县| 吉首市| 湘阴县| 长宁县| 喜德县| 石屏县| 岳阳县|