MySQL 如何查詢 JSON 數(shù)組是否包含特定的值
MySQL 查詢 JSON 數(shù)組是否包含特定的值
假設(shè)定義了一張表 School,其中字段 stages 為 JSON 類型
CREATE TABLE `schools` ( `id` bigint NOT NULL AUTO_INCREMENT, `stages` json DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
插入測(cè)試數(shù)據(jù)
INSERT INTO `schools` ( `stages` ) VALUES ( '[2]' );
查詢表中字段 stages 中包含數(shù)值 2 的所有記錄
JSON_EXTRACT & LIKE
使用 JSON_EXTRACT 函數(shù),可以從 JSON 中提取出指定位置的值。但是它只能提取某個(gè)特定位置的值,不能查詢是否包含某個(gè)值。所以如果需要查詢 JSON 數(shù)組是否包含某個(gè)值,還需補(bǔ)充使用 LIKE。
-- 使用JSON_EXTRACT函數(shù)將數(shù)組的第一個(gè)元素提取出來(lái), 然后使用LIKE聲明匹配是否包含字符串"2" -- 注意, 這種方式只能用于已知數(shù)組中元素位置的情況, 它無(wú)法用于查找一個(gè)值是否在任何位置上都存在 SELECT * FROM `schools` AS `SchoolModel` WHERE JSON_EXTRACT( stages, '$[0]' ) LIKE '%2%'
JSON_CONTAINS
MySQL 5.7 版本引入了 JSON_CONTAINS 函數(shù),用于判斷一個(gè) JSON 數(shù)組是否包含某個(gè)元素。
-- 第一個(gè)參數(shù)是查詢的JSON對(duì)象, 第二個(gè)參數(shù)是需要查找的JSON對(duì)象(在這里是包含一個(gè)字符串"2"的JSON數(shù)組), 第三個(gè)參數(shù)是$(表示查詢應(yīng)該從整個(gè)JSON對(duì)象開(kāi)始) -- 注意, 如果想搜索一個(gè)不是獨(dú)立字符串的值, 例如數(shù)字或布爾值, 需要將值轉(zhuǎn)換成JSON格 -- 例如, 如果想搜索數(shù)字2, 在JSON格式中, 需要寫成'2'而不是原始數(shù)字2 SELECT * FROM `schools` AS `SchoolModel` WHERE JSON_CONTAINS( stages, '2', -- '[2]' '$' )
JSON_CONTAINS 函數(shù)同樣可以用于搜索嵌套在一個(gè)對(duì)象或數(shù)組中的元素。
-- 這個(gè)查詢將返回空結(jié)果, 因?yàn)镴SON數(shù)組中沒(méi)有{"name":"小學(xué)"}
SELECT
*
FROM
`schools`
WHERE
JSON_CONTAINS( `stages`, '{"name":"小學(xué)"}', "$" );參考資料
https://deepinout.com/mysql/mysql-questions/568_mysql_select_where_json_array_contains.html
到此這篇關(guān)于MySQL 查詢 JSON 數(shù)組是否包含特定的值的文章就介紹到這了,更多相關(guān)MySQL 查詢 JSON 數(shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解用SELECT命令在MySQL執(zhí)行查詢操作的教程
這篇文章主要介紹了詳解用SELECT命令在MySQL執(zhí)行查詢操作的教程,本文中還給出了基于PHP腳本的操作演示,需要的朋友可以參考下2015-05-05
Linux虛擬機(jī)下mysql 5.7安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Linux虛擬機(jī)下mysql 5.7安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
mysql max 與 where 間的執(zhí)行問(wèn)題小結(jié)
這篇文章主要介紹了mysql max 與 where 間的執(zhí)行問(wèn)題小結(jié),需要的朋友可以參考下2018-01-01
Windows10下mysql 8.0.19 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Windows10下mysql 8.0.19 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
MySQL查詢樹形結(jié)構(gòu)數(shù)據(jù)的兩種方法
本文主要介紹了MySQL查詢樹形結(jié)構(gòu)數(shù)據(jù)的兩種方法,可以使用遞歸查詢或者閉包表來(lái)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
SQL字符型字段按數(shù)字型字段排序?qū)崿F(xiàn)方法
由于是按字母順序排列,所以123排在了2的前面,顯然不符合我們的要求,那么怎樣才能按照我們預(yù)想的數(shù)字順序排序呢2013-03-03
MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割
這篇文章主要介紹了MySQL實(shí)現(xiàn)用逗號(hào)進(jìn)行拼接、以逗號(hào)進(jìn)行分割問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12

