gpt4 book ai didi

mysql - mysql json 中的复杂正则表达式

转载 作者:行者123 更新时间:2023-11-29 06:30:36 25 4
gpt4 key购买 nike

我在 mysql 表列中有一些缓存列。我们称之为 cacheCol 它的结构为 json。

cacheCol 示例

{
"23": {
"variationOption": "23",
"productCode": "322992-015",
"price": "150",
"qnt": ""
},
"25": {
"variationOption": "25",
"productCode": "322992-015",
"price": "150",
"qnt": "0"
},
"26": {
"variationOption": "26",
"productCode": "322992-015",
"price": "150",
"qnt": "7"
}
}

如果特定 json 部分 qnt > 0,我想选择 myslq 行。在此示例中,带有键 26 的部分只有一个要匹配。

我已经制定了正则表达式来检查这些值: https://www.regextester.com/?fam=109762

但是当我运行查询时

SELECT * FROM "tbl" WHERE ("cacheCol" REGEXP ('(?<=\"26":\{)[^\{]*"qnt":"[1-9]\d*"(?=.*\})'))

出现错误:

Got error 'repetition-operator operand invalid' from regexp

这是可以玩的 sqlfiddle:http://www.sqlfiddle.com/#!9/30335a/1(更新了 sqlfiddle 以涵盖数据库中的更多变化)

有什么方法可以解决我的正则表达式以与 mysql 兼容吗?

找到了一些关于 mysql 5.7 具有 json 数据类型的信息,也许在哪里可以避免使用正则表达式来获得我想要的结果?

最佳答案

对于这样的架构:

CREATE TABLE IF NOT EXISTS `tbl` (
`id` int(6) unsigned NOT NULL,
`cacheCol` TEXT NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tbl` (`id`, `cacheCol`) VALUES
('1', '{"23":{"variationOption":"23","productCode":"322992-015","price":"150","qnt":""}}'),
('2', '{"25":{"variationOption":"25","productCode":"322992-015","price":"150","qnt":"0"}}'),
('3', '{"26":{"variationOption":"26","productCode":"322992-015","price":"150","qnt":"7"}}');

使用以下查询:

SELECT *
FROM `tbl`
where cacheCol REGEXP '.?"qnt":"[1-9]\d*"';

由于该字段始终为 JSON 格式,因此仅搜索子字符串就足够了。

你可以玩一下here

如果您对此对象有很多更新和读取,那么在 Mysql 中探索 JSON 数据类型是个好主意,如果只是为了简单查询,那么您可以将其视为字符串并使用 REGEX 本身。

希望对你有帮助

关于mysql - mysql json 中的复杂正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56524165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com