You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中如何检查数组是否包含指定值?(sql.js+Node.js场景)

在SQLite(sql.js)中筛选包含指定元素的JSON数组行

当然可以实现类似MySQL JSON_CONTAINS的功能!SQLite虽然没有同名函数,但提供了几种灵活的方式来完成这个需求,适配你用的Node.js sql.js环境,下面是几种实用方案:

方案1:使用json_each()展开数组匹配(兼容性最好)

这个方法不依赖高版本SQLite,适合所有支持JSON功能的SQLite版本:

SELECT DISTINCT my_table.*
FROM my_table, json_each(my_table.tags)
WHERE json_each.value = 'love';

原理说明:

  • json_each(my_table.tags)会把每行的JSON数组拆分成多行记录,每行对应一个数组元素
  • 筛选出元素值等于'love'的记录,再用DISTINCT去重(避免同一行因多个匹配元素被重复返回)

方案2:使用json_array_contains()(最接近MySQL写法,需SQLite 3.38.0+)

SQLite 3.38.0及以上版本新增了json_array_contains函数,用法和MySQL的JSON_CONTAINS几乎一致:

-- 两种写法都可行
SELECT * FROM my_table
WHERE json_array_contains(tags, '"love"');

-- 更简洁的写法,函数会自动将字符串转为JSON值
SELECT * FROM my_table
WHERE json_array_contains(tags, 'love');

注意事项:

你需要确认sql.js对应的SQLite内核版本是否达标——一般来说sql.js v1.6.0及以上版本已经包含了这个函数,如果你的版本较旧,建议升级sql.js来使用这个更直观的方法。

方案3:使用LIKE模糊匹配(简单场景应急用)

如果你的数组元素不会出现包含目标字符串的情况(比如不会有'lovely'这种和'love'相似的元素),可以用简单的模糊匹配:

SELECT * FROM my_table
WHERE tags LIKE '%"love"%';

缺点:

这种方法不够严谨,比如数组里有'"lovely"'时会被误匹配,只适合数据格式非常可控的场景。

内容的提问来源于stack exchange,提问作者user10458813

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:42:43