sql - 如何使用mariadb中的JSON函数从json数组中搜索记录
问题描述
我正在我拥有的 mariaDB 中学习 JSON 函数
CREATE TABLE IF NOT EXISTS products (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
type VARCHAR(1) NOT NULL,
name VARCHAR(40) NOT NULL,
format VARCHAR(20) NOT NULL,
price FLOAT(5, 2) NOT NULL,
attr JSON NOT NULL
);
INSERT INTO products (type, name, format, price, attr) VALUES
('M', 'Aliens', 'Blu-ray', 13.99,'{"video": {"resolution": "1080p", "aspectRatio": "1.85:1"}, "cuts": [{"name": "Theatrical", "runtime": 138}, {"name":"Special Edition", "runtime": 155}], "audio": ["DTS HD", "Dolby Surround"]}');
INSERT INTO products (type, name, format, price, attr) VALUES
('B', 'Foundation', 'Paperback', 7.99, '{"author": "Isaac Asimov", "page_count": 296}');
我想找出 Cuts.name="Theatrical" 的记录有多少
SELECT * FROM `products` WHERE JSON_VALUE(attr,'$.cuts.name')='Theatrical'
我在这里得到 0 个结果。如何从 json 数组中搜索数据?
解决方案
方括号[]
应该用于数组。
您可以使用带有参数的函数JSON_EXTRACT(attr, "$.cuts[*].name")
内嵌套来确定数组元素的元组是否包含:JSON_CONTAINS()
'"Theatrical"'
name
cuts
'"Theatrical"'
SELECT COUNT(*)
FROM `products`
WHERE JSON_CONTAINS( JSON_EXTRACT(attr, "$.cuts[*].name"), '"Theatrical"' )
推荐阅读
- sql - Vertica/SQL,大小写语法
- powershell - PowerShell 模块中是否存在检查函数
- deep-learning - 用两个完全不同的数据集训练神经网络。
- r - 在一个包中包括 shinyBS
- wordpress - Wordpress 按 DESC 对自定义字段整数排序,按 ASC 对小数排序
- c# - 输入上的可选数据属性 [Html]
- c# - 如何创建 SHA1WithRSA 签名
- powershell - 如何从返回非布尔结果的 cmdlet 做出基于布尔值的控制决策?
- javascript - 当我单击同一个 div 或 div 外部时,如何隐藏和切换弹出元素?
- algorithm - 在广度优先搜索和深度优先搜索中,为什么访问的数组是全局初始化的