首页 > 解决方案 > 使用查询调用 db 中的 json 数组数据

问题描述

我有一个数据库,其值如下:图像我可以使用单个查询在属性列中调用listing_id(23,27 ....等等)的json值(将行值作为“列表”),我真的会感谢帮助。

标签: sqlruby-on-railsdatabasesqlite

解决方案


如果安装了JSON 扩展,是的,您可以使用json_each. 那是一个 table_valued_function,所以它被当作一个表来对待。

您可能希望SELECT * from ahoy_events,json_each(properties)在 sqlite 浏览器中执行以感受数据。

就像是:

SELECT value as listing
from ahoy_events,json_each(properties)
where key = 'listing_id'

应该列出 id(值)

[编辑]

如果 JSON 扩展不可用,您可以尝试使用SQLite 核心函数 substrinstrlength

:在和之间可以看到属性列的值部分}。是:在位置instr(properties,':')

substr(properties,instr(properties,':') + 1,length(properties)-instr(properties,':') - 1)

从文档中,“ substr(X,Y,Z) 函数返回输入字符串 X 的子字符串,该子字符串以第 Y 个字符开头,长度为 Z 个字符。 '

Y 是instr(properties,':') + 1,即 之后的字符:。Z 是length(properties)-instr(properties,':') - 1)

您可以substr在 SELECT 或 WHERE 中使用。

另一个想法:如果该properties列始终是单值的,正如数据似乎显示的那样,只将“值”插入到数据库的属性列中不是更容易吗?或者添加一个新listing_id列。该方法适用于如图所示的结构化数据,我不知道生产数据将如何结构化。


推荐阅读