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

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

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

應(yīng)用背景

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

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

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

使用模糊查詢的問題

因為subject里面存的不是具體的一個值,所以使用=顯然是不行的,這個時候大家首先會想到like的模糊查詢,我們一起來看看效果

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

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

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

解決方案一

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

匹配單個(只包含1)sql語句如下

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

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

查出了subject包含1的學生信息

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

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

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

查出了subject包含1跟3的學生信息

解決方案二

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

匹配單個(只包含1)sql語句如下

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

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

查出了subject包含1的學生信息

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

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

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

查出了subject包含1跟3的學生信息

總結(jié)

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

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

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

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

相關(guān)文章

  • MySQL事務(wù)&用戶與權(quán)限管理方式

    MySQL事務(wù)&用戶與權(quán)限管理方式

    本文介紹了事務(wù)的概念以及ACID特性,事務(wù)能在并發(fā)環(huán)境中保證數(shù)據(jù)正確性和一致性,重點介紹了MySQL事務(wù)的實現(xiàn),包括開啟和關(guān)閉事務(wù)、保存點、自動提交/手動提交等,此外,還詳細解釋了事務(wù)的隔離級別和常見問題,并介紹了用戶權(quán)限管理的重要性及基本操作
    2026-05-05
  • MySQL binlog_ignore_db 參數(shù)的具體使用

    MySQL binlog_ignore_db 參數(shù)的具體使用

    這篇文章主要介紹了MySQL binlog_ignore_db 參數(shù)的具體作用,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • MySQL數(shù)據(jù)庫必知必會之安全管理

    MySQL數(shù)據(jù)庫必知必會之安全管理

    MySQL數(shù)據(jù)庫通常包含關(guān)鍵的數(shù)據(jù),為確保這些數(shù)據(jù)的安全和完整,需要利用訪問控制和用戶管理的功能,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫必知必會之安全管理的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • MySQL5.7.27-winx64版本win10下載安裝教程圖解

    MySQL5.7.27-winx64版本win10下載安裝教程圖解

    這篇文章主要介紹了MySQL5.7.27-winx64版本win10下載安裝教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • mysql啟動服務(wù)報1058錯誤的解決方法

    mysql啟動服務(wù)報1058錯誤的解決方法

    這篇文章主要介紹了mysql啟動服務(wù)報1058錯誤的解決方法,需要的朋友可以參考下
    2014-03-03
  • 教你自動恢復MySQL數(shù)據(jù)庫的日志文件(binlog)

    教你自動恢復MySQL數(shù)據(jù)庫的日志文件(binlog)

    如果MySQL服務(wù)器啟用了二進制日志,你可以使用mysqlbinlog工具來恢復從指定的時間點開始
    2014-05-05
  • mybatis 實現(xiàn) SQL 查詢攔截修改詳解

    mybatis 實現(xiàn) SQL 查詢攔截修改詳解

    這篇文章主要介紹了mybatis 實現(xiàn) SQL 查詢攔截修改詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 查看mysql當前連接數(shù)的方法詳解

    查看mysql當前連接數(shù)的方法詳解

    這篇文章主要介紹了查看mysql當前連接數(shù)的方法詳解,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • MySQL Order By Rand()效率分析

    MySQL Order By Rand()效率分析

    本文詳細解說了MySQL Order By Rand()效率優(yōu)化的方案,并給出了優(yōu)化的思路過程,是篇不可多得的MySQL Order By Rand()效率美文
    2012-07-07
  • MySQL skip-character-set-client-handshake導致的一個字符集問題

    MySQL skip-character-set-client-handshake導致的一個字符集問題

    這篇文章主要介紹了MySQL skip-character-set-client-handshake導致的一個字符集問題,需要的朋友可以參考下
    2014-07-07

最新評論

舟曲县| 青神县| 丁青县| 綦江县| 思南县| 嵊泗县| 和龙市| 镇原县| 丰都县| 北票市| 岐山县| 新昌县| 行唐县| 蚌埠市| 大渡口区| 柳江县| 昭觉县| 怀远县| 沅江市| 建始县| 瓮安县| 乌鲁木齐县| 文安县| 博野县| 普陀区| 卓资县| 乌苏市| 望奎县| 克山县| 中卫市| 定日县| 张掖市| 土默特左旗| 分宜县| 资讯 | 长治县| 大厂| 聂荣县| 桃源县| 宁蒗| 武穴市|