首页 > 解决方案 > MariaDB 10.1中通过json键的值查找所有记录

问题描述

我有 MariaDB 10.1。- 我不能使用 JSON 函数 -JSON_EXTRACT等等)。

在数据库中,我有一个表 CONTRACTS 和一个data包含 JSON(数据类型 TEXT)的列:

{"879": "Test", "880": "15255", "881": "2021-10-22"}

我需要找到键值"880"在某个范围内的所有记录,例如大于10000和小于20000,即。在这种情况下,值为 的记录15255

谢谢你的建议。

标签: mariadbmysql-jsonmariadb-10.1

解决方案


也许是这样的:

SELECT
  TRIM(BOTH '"' FROM 
    REGEXP_SUBSTR(REGEXP_SUBSTR(CONTRACTS.`data`, '"880": "[0-9]+"'), '"[0-9]+"$')
  ) * 1 BETWEEN 10000 AND 20000
FROM
  (SELECT 
   '{"879": "Test", "880": "15255", "881": "2021-10-22"}' AS `data`
  ) AS CONTRACTS

所以最内部的正则表达式给你键+值。外部正则表达式采用该结果并提取引号中的值。修剪引号并测试值。您可以使用整个 TRIM(...) 作为 criterium 。


推荐阅读