【问题标题】:mysql json datatype searching for a value inside the arraymysql json数据类型在数组内搜索值
【发布时间】:2023-03-29 13:16:01
【问题描述】:

我在 MySQL 表中有一个 json 类型的列,该列中的值是一个简单的一维数组(例如 [1,2,3,4,5])。如何使用json_contains函数返回json数组中包含值“5”的所有行?

【问题讨论】:

    标签: mysql arrays json


    【解决方案1】:

    试试:

    mysql> DROP TABLE IF EXISTS `tbl`;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> CREATE TABLE IF NOT EXISTS `tbl` (
        ->   `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
        ->   `json` JSON NOT NULL
        -> );
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> INSERT INTO `tbl`
        ->   (`json`)
        -> VALUES
        ->   ('[1,2,3,4,5]'),
        ->   ('[1,2,3,4]'), 
        ->   ('[1,2]'),
        ->   ('[1]'),
        ->   ('[1,5]');
    Query OK, 5 rows affected (0.01 sec)
    Records: 5  Duplicates: 0  Warnings: 0
    
    mysql> SELECT
        ->   `id`,
        ->   `json`
        -> FROM
        ->   `tbl`
        -> WHERE
        ->   JSON_CONTAINS(`json`, '5');
    +----+-----------------+
    | id | json            |
    +----+-----------------+
    |  1 | [1, 2, 3, 4, 5] |
    |  5 | [1, 5]          |
    +----+-----------------+
    2 rows in set (0.00 sec)
    

    db-fiddle

    更新

    mysql> DROP TABLE IF EXISTS `tbl`;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> CREATE TABLE IF NOT EXISTS `tbl` (
        ->   `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
        ->   `json` JSON NOT NULL
        -> );
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> INSERT INTO `tbl`
        ->   (`json`)
        -> VALUES
        ->   ('["1","2","3","4","5"]'),
        ->   ('["1","2","3","4"]'), 
        ->   ('["1","2"]'),
        ->   ('["1"]'),
        ->   ('["1","5"]');
    Query OK, 5 rows affected (0.00 sec)
    Records: 5  Duplicates: 0  Warnings: 0
    
    mysql> SELECT
        ->   `id`,
        ->   `json`
        -> FROM
        ->   `tbl`
        -> WHERE
        ->   JSON_CONTAINS(`json`, '"5"');
    +----+---------------------------+
    | id | json                      |
    +----+---------------------------+
    |  1 | ["1", "2", "3", "4", "5"] |
    |  5 | ["1", "5"]                |
    +----+---------------------------+
    2 rows in set (0.00 sec)
    

    db-fiddle

    【讨论】:

    • aah 是的,这就是我所做的,但它不起作用,因为我的数组中的值是字符串。如何让 JSON_CONTAINS 使用字符串?我试图逃避引用,但没有成功。
    猜你喜欢
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多