我使用sqlite来存储JSON数据,我无法控制这些数据。我有一个logs表,如下所示。
| 标识符|价值|
| - -|- -|
| s8 i13 s85 e8 f34 zm 8vikkcv 5 n的一个例子|{“密钥”:[“a”,“B”]}|
| m2 abxfn 2n 9 pkyc 9 kjmko 5462的一个例子|{“键”:“一些文本”}|
然后使用以下查询获取value.key
中包含a
的行:
SELECT * FROM logs WHERE EXISTS (SELECT * FROM json_each(json_extract(logs.value,'$.key')) WHERE json_each.value = 'a')
如果key是一个数组或者它不存在,查询就可以正常工作。但是如果是一个字符串(如表的第二行),查询就会失败。
我得到的错误是:SQL error or missing database (malformed JSON)
这是因为如果参数是字符串,则json_each
会引发。
由于需求,我无法控制用户数据或查询。
理想情况下,我希望找出一个查询,它要么不会失败,要么检测到值是字符串而不是数组,并使用LIKE
来查看字符串是否包含'a'
。
任何帮助都将不胜感激。节日快乐:)
1条答案
按热度按时间cigdeys31#
在
WHERE
子句中使用CASE
表达式,检查值是否为数组:请参阅demo。