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

MySQL查詢JSON數(shù)組字段包含特定字符串的方法

 更新時(shí)間:2025年06月30日 15:21:40   作者:一勺菠蘿丶  
在MySQL數(shù)據(jù)庫中,當(dāng)某個(gè)字段存儲(chǔ)的是JSON數(shù)組,需要查詢數(shù)組中包含特定字符串的記錄時(shí)傳統(tǒng)的LIKE語句無法直接使用,下面小編就為大家介紹兩種高效的解決方案吧

問題背景

在MySQL數(shù)據(jù)庫中,當(dāng)某個(gè)字段存儲(chǔ)的是JSON數(shù)組(如["噴繪","2.6m噴繪","M噴繪","直噴","雙透","氣模"]),需要查詢數(shù)組中包含特定字符串(如’氣模’)的記錄時(shí),傳統(tǒng)的LIKE語句無法直接使用。本文介紹兩種高效的解決方案。

解決方案對(duì)比

1. 精確匹配方案(推薦)

當(dāng)需要完全匹配數(shù)組中的元素時(shí)(如精確查找"氣模"):

SELECT *
FROM process_unit_prices
WHERE 
  process_name = '制圖' 
  AND JSON_CONTAINS(craft_name, JSON_QUOTE('氣模'))
LIMIT 1;

1.核心函數(shù)

  • JSON_QUOTE(): 將字符串轉(zhuǎn)為JSON格式(如"氣模"
  • JSON_CONTAINS(): 檢查JSON數(shù)組中是否包含指定值

2.優(yōu)點(diǎn):效率高,精確匹配數(shù)組元素

3.注意:必須元素完全相等才會(huì)匹配(如"氣模車"不會(huì)匹配)

2. 模糊匹配方案

當(dāng)需要部分匹配元素內(nèi)容時(shí)(如查找包含"氣模"子串的元素):

SELECT *
FROM process_unit_prices
WHERE 
  process_name = '制圖' 
  AND JSON_SEARCH(craft_name, 'one', '%氣模%') IS NOT NULL
LIMIT 1;

1.核心函數(shù)

  • JSON_SEARCH(): 搜索JSON中匹配模式的路徑
  • 'one': 找到第一個(gè)匹配即停止
  • '%氣模%': SQL的LIKE通配符模式

2.優(yōu)點(diǎn):支持模糊匹配

3.注意:效率低于精確匹配,大數(shù)據(jù)量時(shí)需謹(jǐn)慎

參數(shù)化查詢示例

在MyBatis等ORM框架中使用(如Spring Boot項(xiàng)目):

<!-- 精確匹配 -->
<select id="findProcess" resultType="ProcessPrice">
  SELECT * FROM process_unit_prices
  WHERE process_name = #{processType}
    AND JSON_CONTAINS(craft_name, JSON_QUOTE(#{craft}))
  LIMIT 1
</select>

<!-- 模糊匹配 -->
<select id="findProcessFuzzy" resultType="ProcessPrice">
  SELECT * FROM process_unit_prices
  WHERE process_name = #{processType}
    AND JSON_SEARCH(craft_name, 'one', CONCAT('%', #{craft}, '%')) IS NOT NULL
  LIMIT 1
</select>

使用場景建議

場景推薦方案示例
分類標(biāo)簽匹配精確匹配工藝類型=[“雕刻”,“噴涂”]
關(guān)鍵字搜索模糊匹配描述包含"緊急"的訂單
多值屬性過濾精確匹配顏色=[“紅”,“藍(lán)”]

性能優(yōu)化貼士

索引優(yōu)化:MySQL 8.0+可為JSON字段創(chuàng)建函數(shù)索引

CREATE INDEX idx_craft ON process_unit_prices((CAST(craft_name AS CHAR(255))));

數(shù)據(jù)規(guī)范:若常需查詢,建議拆分為關(guān)系表

避免全模糊%氣模%無法使用索引,盡量用氣模%

經(jīng)驗(yàn)總結(jié):JSON字段查詢雖靈活,但需謹(jǐn)慎使用。精確匹配首選JSON_CONTAINS,模糊需求再用JSON_SEARCH,并注意性能影響。在數(shù)據(jù)設(shè)計(jì)階段評(píng)估是否真需JSON結(jié)構(gòu),關(guān)系表通常更高效。

知識(shí)擴(kuò)展

下面小編為大家整理了MYSQL 匹配查詢JSON字段的相關(guān)方法,希望對(duì)大家有所幫助

在 MySQL 中,如果你存儲(chǔ)的是 JSON 數(shù)據(jù),并且需要檢查某個(gè) JSON 字段是否包含一個(gè)特定的鍵值對(duì)(例如 {user1: 1}),你可以使用 MySQL 提供的 JSON 函數(shù)來實(shí)現(xiàn)。

1. 使用 JSON_CONTAINS() 函數(shù)

JSON_CONTAINS() 函數(shù)可以檢查一個(gè) JSON 字段是否包含另一個(gè) JSON 值。該函數(shù)返回一個(gè)布爾值,如果第一個(gè)參數(shù)(JSON 數(shù)據(jù))包含第二個(gè)參數(shù)(查詢條件),則返回 1,否則返回 0。

示例查詢:

假設(shè)你的表結(jié)構(gòu)如下:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_data JSON
);

你可以通過 JSON_CONTAINS() 函數(shù)來檢查 JSON 字段是否包含 {user1: 1}

SELECT * 
FROM users 
WHERE JSON_CONTAINS(user_data, '{"user1": 1}');

這條 SQL 語句會(huì)返回所有 user_data 字段包含 {user1: 1} 鍵值對(duì)的記錄。

2. JSON_CONTAINS() 函數(shù)的使用細(xì)節(jié)

  • 第一個(gè)參數(shù)是你要查詢的 JSON 字段。
  • 第二個(gè)參數(shù)是你要查找的 JSON 數(shù)據(jù),必須是一個(gè)有效的 JSON 格式字符串。
  • 該函數(shù)會(huì)檢查 JSON 字段中是否存在第二個(gè)參數(shù)所表示的鍵值對(duì)。

3. 查詢部分匹配

如果你只想檢查 JSON 字段中是否存在某個(gè)鍵(例如 user1)并且該鍵的值是 1,而不關(guān)心 JSON 字段中的其他內(nèi)容,你仍然可以使用 JSON_CONTAINS(),但是需要確保第二個(gè)參數(shù)符合你想要的結(jié)構(gòu)。

SELECT * 
FROM users 
WHERE JSON_CONTAINS(user_data, '{"user1": 1}');

4. 檢查 JSON 字段中是否包含某個(gè)鍵

如果你不關(guān)心鍵值對(duì),只想檢查 JSON 字段中是否包含某個(gè)鍵(比如 user1),可以使用 JSON_EXTRACT() 或 JSON_UNQUOTE() 與 IS NOT NULL 來實(shí)現(xiàn)。

SELECT * 
FROM users 
WHERE JSON_UNQUOTE(JSON_EXTRACT(user_data, '$.user1')) = '1';
  • JSON_EXTRACT(user_data, '$.user1') 提取 user_data 字段中的 user1 鍵的值。
  • JSON_UNQUOTE() 去除引號(hào),使其返回一個(gè)普通值。
  • 比較提取的值是否等于 '1'。

小結(jié)

  • JSON_CONTAINS():用于檢查 JSON 字段是否包含某個(gè)指定的鍵值對(duì)。
  • JSON_EXTRACT() + JSON_UNQUOTE():可以用來提取并比較 JSON 字段中的值。

使用 JSON_CONTAINS() 是檢查 JSON 數(shù)據(jù)是否包含某個(gè)完整鍵值對(duì)的簡便方法。如果你需要更細(xì)粒度的查詢(如只關(guān)心鍵是否存在且其值為特定值),可以結(jié)合 JSON_EXTRACT() 和 JSON_UNQUOTE() 進(jìn)行操作。

到此這篇關(guān)于MySQL查詢JSON數(shù)組字段包含特定字符串的方法的文章就介紹到這了,更多相關(guān)MySQL查詢JSON字段內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫中的幾種方法

    將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫中的幾種方法

    今天小編就為大家分享一篇關(guān)于將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫中的幾種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • windows下安裝mysql8.0.18的教程(社區(qū)版)

    windows下安裝mysql8.0.18的教程(社區(qū)版)

    本文章簡單介紹一下mysql在windows下的安裝方式,主要介紹了mysql社區(qū)版8.0.18版本,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2020-01-01
  • MySQL中無GROUP BY情況下直接使用HAVING語句的問題探究

    MySQL中無GROUP BY情況下直接使用HAVING語句的問題探究

    這篇文章主要介紹了MySQL中無GROUP BY情況下直接使用HAVING語句的問題探究,同時(shí)探究了該情況下MAX與MIN功能的使用情況,需要的朋友可以參考下
    2015-05-05
  • MySQL解決外鍵約束沖突的詳細(xì)步驟和代碼示例

    MySQL解決外鍵約束沖突的詳細(xì)步驟和代碼示例

    外鍵約束沖突是指在插入、更新或刪除數(shù)據(jù)時(shí)違反了外鍵約束,從而導(dǎo)致數(shù)據(jù)庫操作失敗,外鍵約束確保數(shù)據(jù)庫表之間的關(guān)系完整性,但在某些情況下會(huì)引起沖突,以下是詳細(xì)步驟和相關(guān)代碼示例,展示如何解決外鍵約束沖突,需要的朋友可以參考下
    2025-07-07
  • 用MyEclipse配置DataBase Explorer(圖示)

    用MyEclipse配置DataBase Explorer(圖示)

    本文介紹了,用MyEclipse配置DataBase Explorer的圖片示例。需要的朋友參考下
    2013-04-04
  • MySql主從復(fù)制機(jī)制全面解析

    MySql主從復(fù)制機(jī)制全面解析

    這篇文章主要介紹了MySql主從復(fù)制機(jī)制全面解析的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-04-04
  • MySQL 中定義和使用變量的方法

    MySQL 中定義和使用變量的方法

    MySQL 提供了多種類型的變量,以適應(yīng)不同的應(yīng)用場景,用戶定義的變量適用于簡單的會(huì)話內(nèi)數(shù)據(jù)傳遞,局部變量適合在復(fù)雜的存儲(chǔ)過程中使用,而會(huì)話變量則用于調(diào)整和優(yōu)化數(shù)據(jù)庫會(huì)話的行為,這篇文章主要介紹了MySQL 中定義和使用變量,需要的朋友可以參考下
    2024-04-04
  • mysql5.7.22 下載過程圖解

    mysql5.7.22 下載過程圖解

    這篇文章主要介紹了mysql5.7.22 下載過程圖解,非常不錯(cuò),具有參考價(jià)借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • 淺談MySQL的B樹索引與索引優(yōu)化小結(jié)

    淺談MySQL的B樹索引與索引優(yōu)化小結(jié)

    這篇文章主要介紹了淺談MySQL的B樹索引與索引優(yōu)化小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Mysql數(shù)據(jù)庫開啟遠(yuǎn)程連接流程

    Mysql數(shù)據(jù)庫開啟遠(yuǎn)程連接流程

    文章講述了如何在本地MySQL數(shù)據(jù)庫上開啟遠(yuǎn)程訪問,并詳細(xì)步驟包括配置防火墻、設(shè)置MySQL用戶權(quán)限、使用Navicat進(jìn)行遠(yuǎn)程連接等
    2025-02-02

最新評(píng)論

贵南县| 申扎县| 巫山县| 永城市| 景德镇市| 湟源县| 高雄县| 阿克陶县| 嫩江县| 会昌县| 无为县| 宁河县| 新宾| 沅陵县| 宁远县| 榆树市| 花莲县| 沙洋县| 龙井市| 嘉祥县| 台中市| 广水市| 彰化县| 商河县| 措勤县| 靖江市| 高台县| 仁怀市| 金平| 怀远县| 驻马店市| 桃源县| 巧家县| 郎溪县| 广州市| 遂溪县| 南部县| 三都| 卫辉市| 城固县| 武威市|