【问题标题】:Find all records by the value of the json key in MariaDB 10.1MariaDB 10.1中通过json键的值查找所有记录
【发布时间】:2021-10-31 08:21:51
【问题描述】:

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

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

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

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

感谢您的建议。

【问题讨论】:

  • 由于json functionsWITH,升级您的MariaDB 版本可能是个好主意
  • 我编辑了标题和标签以更清楚地表明您正在使用 MariaDB。 MariaDB 不是 MySQL,尽管它是在 2010 年从 MySQL 分叉出来的。

标签: mariadb mysql-json mariadb-10.1


【解决方案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(...) 作为标准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2015-07-16
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多