sgt*_*dck 8 sqlite node.js sqlite-json1 sqlite-browser
我已经通过brew安装了带有JSON1的SQLite3:
brew install sqlite3 --with-json1 --with-fts5
Run Code Online (Sandbox Code Playgroud)
版本:
3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8
Run Code Online (Sandbox Code Playgroud)
运行查询时,某些函数可以正常工作,例如json_extract
:
sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';
["foo","bar","baz"]
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用json_each
or时json_tree
,它失败了:
sqlite> SELECT json_each(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]';
Error: no such function: json_each
Run Code Online (Sandbox Code Playgroud)
Body
表中的字段是Event
有效的 JSON 字符串:
{"issue":{"fields":{"labels": ["foo","bar","baz"]}}}
Run Code Online (Sandbox Code Playgroud)
并且该labels
值是一个数组。
我已阅读文档(并查看了json_each 示例),搜索了互联网,但找不到任何其他要求来启用此功能。
我做错了什么,或者:我如何从 json_each/json_tree 中获益?
问题在于json_each
和json_tree
是表值函数,这意味着它们只能用于获取内存中已存在的虚拟表上的数据,而不能直接从数据库查询数据。
参见:SQLite的虚表机制
2.1.2. 表值函数
包含隐藏列的虚拟表可以像 SELECT 语句的 FROM 子句中的表值函数一样使用。表值函数的参数成为虚拟表的 HIDDEN 列的约束。
当SELECT json_each(Body, '$.issue.fields.labels') ...
sqlite3 找不到与其定义匹配的函数时SELECT
,就会出现您看到的错误。
归档时间: |
|
查看次数: |
9415 次 |
最近记录: |