错误:没有这样的函数:json_each在安装了JSON1的SQLite中
我通过brew安装了带有JSON1的SQLite3:
brew install sqlite3 --with-json1 --with-fts5
版:
3.15.2 2016-11-28 19:13:37 bbd85d235f7037c6a033a9690534391ffeacecc8
在运行查询时,一些函数可以正常工作,比如json_extract
:
sqlite> SELECT json_extract(Body, '$.issue.fields.labels') FROM Event WHERE json_extract(Body, '$.issue.fields.labels') != '[]'; ["foo","bar","baz"]
但是,当我尝试使用json_each
或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
Event
表中的Body
字段是一个有效的JSONstring:
{"issue":{"fields":{"labels": ["foo","bar","baz"]}}}
而labels
值是一个数组。
我已经阅读了文档(并查看了json_each示例 ),search了interwebs,但找不到任何其他要求来启用它。
我做错了什么,或者:我如何从json_each / json_tree中获得好处?
问题是json_each
和json_tree
是表值函数 ,这意味着它们只能用于在已经存在于内存中的虚拟表上获取数据,而不能直接从数据库查询数据。
请参阅: SQLite的虚拟表机制
2.1.2。 表值函数
包含隐藏列的虚拟表可以像SELECT语句的FROM子句中的表值函数一样使用。 表值函数的参数成为虚拟表的HIDDEN列上的约束。
当SELECT json_each(Body, '$.issue.fields.labels') ...
sqlite3找不到与它的SELECT
定义相匹配的函数并导致出现错误。
AFAIK,你不能在查询中使用json_each()
和json_tree()
作为字段,它们是表值函数 。 你只能像表一样使用它们。