返回顶部
首页 > 资讯 > 数据库 >MySQL 判断 JSON 数组是否包含某元素
  • 913
分享到

MySQL 判断 JSON 数组是否包含某元素

GORMMySQLJSON数组 2023-09-14 17:09:04 913人浏览 独家记忆
摘要

文章目录 1.问题描述2.使用 JSON_CONTAINS 函数3.使用 gorm.io/datatypes4.JSON 数组包含多个元素的任意一个参考文献 1.问题描述 在 Mysql

文章目录

1.问题描述

Mysql 中,并没有内置的数组数据类型。但是,mysql 提供了一些可以实现类似数组功能的机制,如使用字符串来存储由逗号分隔的值,或使用 JSON 类型来存储数组数据等。

假设您正在使用 GORM 和 Mysql 数据库,并且您的数据表中有一个名为 data 的 jsON 类型的列,其中存储了一个字符串数组,您想要查询该数组是否包含某个元素。

import ("gORM.io/datatypes")type MyModel struct {    ID   uint    Data datatypes.JSON `Gorm:"column:data"`}

2.使用 JSON_CONTaiNS 函数

MySQL JSON_CONTAINS 函数可用于判断 JSON 数组中是否包含某个元素。

JSON_CONTAINS 的格式如下:

JSON_CONTAINS(target, candidate[, path])

target 要搜索的 JSON 数据。

candidate 要查找的 JSON 值或对象。

path (可选) 指定一个 JSON 路径表达式,用于在目标 JSON 数据中定位要搜索的子对象。

包含返回 1, 不包含返回 0。如果任何参数为 NULL,或 path 参数没有标识目标文档的部分,则返回 NULL。如果 target 或 candidate 不是有效的 JSON 文档,或者 path 不是有效的路径表达式或包含***通配符,则发生错误。

我们可以使用原生 SQL 作为 GORM 的内联条件来判断 JSON 数组中是否包含某值。

var rows []MyModelDB.Where(fmt.Sprintf(`JSON_CONTAINS(data,'"%v"')`, YOUR_STR_VALUE)).Find(&rows)

因为 JSON 字符串数组中的元素是被双引号包裹的,所以指定字符串时,需要指定双引号。此时 SQL 字符串包含双引号,可以使用单引号表示包含双引号的字符串。

如果需要指定多个值,可以使用 JSON_ARRAY 函数将多个值创建为 JSON 数组。

如果指定多个值,表示要同时包含多个值条件才为 true。

DB.Where(fmt.Sprintf(`JSON_CONTAINS(data, JSON_ARRAY("%v")`, YOUR_STR_VALUE)).Find(&rows)

JSON_CONTAINS 函数还可以判断 JSON 对象中某个字段的值是否为指定的值,具体用法可参见 MySQL 官网的介绍。

3.使用 gorm.io/datatypes

gorm.io/datatypes 是 GORM v2 版本中引入的一个包,提供了一些数据库特定的数据类型,例如 JSON、HSTORE、ARRAY、UUID 等。

datatypes 支持对 JSON 数组的包含查询。

var rows []MyModelDB.Where(datatypes.JSONArrayQuery("data").Contains("YOUR_STR_VALUE")).Find(&rows)

4.JSON 数组包含多个元素的任意一个

如果给定多个元素,JSON 数组中只要包含其中任意一个元素,则认为是 true,该如何实现呢?

MySQL 5.7 和 8.0 均未包含一个类似 JSON_CONTAINS 的函数 JSON_CONTAINS_ANY 来实现我们想要的效果。

在 MySQL 5.7 中,我们可以使用 OR 运算符实现。

SELECT * FROM   table_nameWHERE  JSON_CONTAINS(json_array_column, value1) OR JSON_CONTAINS(json_array_column, value2)

如果使用 gorm.io/datatypes 实现的话,类似于下面的实现。

db := DB.Model(&MyModel{})for i, v := range values{if i == 0 {db.Where(datatypes.JSONArrayQuery("json_array_column").Contains(v))} else {db.Or(datatypes.JSONArrayQuery("json_array_column").Contains(v))}}

从 MySQL 8.0 开始,可以使用 JSON_OVERLAPS 函数。

SELECT * FROM   table_nameWHERE  JSON_OVERLAPS(json_array_column, JSON_ARRAY(val[, val] ...]))

参考文献

OpenAI ChatGPT
12.18.3 Functions That Search JSON Values
mysql,查询json数组字段中包含某个元素的sql语句 - CSDN博客
MySQL Filter JSON_CONTAINS Any value from Array - stackoverflow.com

来源地址:https://blog.csdn.net/K346K346/article/details/128863722

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 判断 JSON 数组是否包含某元素

本文链接: https://lsjlt.com/news/407599.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL 判断 JSON 数组是否包含某元素
    文章目录 1.问题描述2.使用 JSON_CONTAINS 函数3.使用 gorm.io/datatypes4.JSON 数组包含多个元素的任意一个参考文献 1.问题描述 在 MySQL ...
    99+
    2023-09-14
    GORM MySQL JSON 数组
  • java判断数组是否包含某个元素
    一:使用Listpublic static boolean useList(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetVal...
    99+
    2018-10-06
    java基础 java 判断 数组 包含 元素
  • java数组怎么判断是否包含某元素
    可以使用循环遍历数组,逐个比较数组中的元素是否与目标元素相等,如果有相等的元素,则认为数组包含该元素。 以下是一个示例代码: pub...
    99+
    2023-10-25
    java
  • es6如何判断数组是否包含某个元素
    ES6中可以使用includes()方法来判断一个数组是否包含某个元素。这个方法返回一个布尔值,表示数组是否包含指定的元素。语法如下...
    99+
    2023-10-07
    es6
  • es6怎么判断数组是否包含某个元素
    ES6 中可以使用 `includes()` 方法来判断数组是否包含某个元素。 示例代码如下: const arr = [1, 2,...
    99+
    2023-10-26
    es6
  • java中判断数组是否包含某元素的方法
    有两种方法可以判断数组是否包含元素:方法1, 将数组转换为list,然后使用list的contains方法来判断:Arrays.asList(...).contains(...)java.lang.String.contains() 方法返...
    99+
    2016-05-11
    java
  • php怎么判断数组中是否包含某个元素
    可以使用in_array函数来判断数组中是否包含某个元素。该函数接受两个参数,第一个参数是要判断的元素,第二个参数是待判断的数组。如...
    99+
    2023-08-16
    php
  • java数组判断是否包含某元素的方法是什么
    在Java中,可以使用以下方法来判断一个数组是否包含某个元素: 使用循环遍历数组,逐个比较元素是否与目标元素相等。例如: pub...
    99+
    2023-10-24
    java
  • angularjs数组如何判断是否含有某个元素
    这篇文章主要介绍了angularjs数组如何判断是否含有某个元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。也就是in_array函数,判...
    99+
    2024-04-02
  • jquery如何判断是否包含某个id元素
    这篇文章主要介绍了jquery如何判断是否包含某个id元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 方法:...
    99+
    2024-04-02
  • php判断字符串是否包含数组元素
    在PHP编程中,经常需要判断一个字符串是否包含一个数组中的元素。这种操作在实际开发中非常常见,通常是通过字符串函数和数组函数来实现的。使用字符串函数 strposPHP中的字符串函数strpos可以用来判断一个字符串中是否包含另一个字符串。...
    99+
    2023-05-23
  • es6如何判断数组是否含有某个子元素
    这篇文章主要介绍es6如何判断数组是否含有某个子元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 方法:1、使用indexOf()函数,语法“数组对象....
    99+
    2024-04-02
  • java判断数组是否包含某个值
    java判断数组是否包含某个值相信大家在操作Java的时候,经常会要检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作。下面给出四种方式,其中最有效率的还是loop方式,有兴趣的话可以测试一下:pub...
    99+
    2020-03-21
    java基础 java 判断 数组
  • php判断数组中是否包含某个
    键值作为一门开发语言,PHP在数组处理方面有着非常丰富的支持。对于任何一个PHP开发者来说,如何判断一个数组中是否包含某个键值是一个很基础的问题。在本文中,我们将探讨PHP中判断数组是否包含某个键值的几种方法。方法一:使用array_key...
    99+
    2023-05-19
  • vue怎么判断字符串是否包含某个元素
    可以使用JavaScript中的`includes()`方法判断字符串是否包含某个元素。示例代码如下:```javascriptva...
    99+
    2023-08-09
    vue
  • 如何判断json中是否包含某个值
    要判断一个 JSON 对象中是否包含某个值,可以使用以下方法:1. 将 JSON 字符串转换为对象使用 JSON.parse() 方...
    99+
    2023-09-29
    json
  • Java中高效判断数组中是否包含某个元素的几种方法
    目录检查数组是否包含某个值的方法使用List使用Set使用循环判断使用Arrays.binarySearch()时间复杂度使用一个长度为1k的数组使用一个长度为10k的数组总结补充使...
    99+
    2024-04-02
  • asp怎么判断数组是否包含某个值
    在ASP中,可以使用`InArray`函数来判断一个数组是否包含某个值。`InArray`函数接受两个参数:要查找的值和要搜索的数组...
    99+
    2023-09-16
    asp
  • javascript数组如何判断是否存在某元素
    这篇文章给大家分享的是有关javascript数组如何判断是否存在某元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器...
    99+
    2023-06-14
  • php如何判断数组是否有某个元素
    这篇“php如何判断数组是否有某个元素”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何判断数组是否有某个元素”文章吧...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作