3

我将此 JSON 存储在 DB 中:列名:json

- '{"brand":"1","year":"2008","model":"2","price":"2001212","category":"Category Example"}'
- '{"brand":"1","year":"2008","model":"2","price":"2001212","category":"Category Example2"}'

我想使用 Like 运算符进行搜索以查找所有带有“Category”字样的类别:

此刻我这样做,但只返回一个完整的短语:

select * from table where json like '%"category":"Category Example"%';

如何构建一个返回所有具有“类别词”的类别的查询?

更新:

我正在使用 MySQL 谢谢

4

4 回答 4

5

虽然未声明这看起来像一个 Postgres 问题。

当前版本 9.2 中几乎没有任何 JSON 处理工具。但是一整套工具将与即将推出的Postgres 9.3一起提供, 目前处于测试阶段

我将您的问题解释为:

查找 json 列包含一个或多个名为“category”的字段的所有行,该字段的值包含字符串“Category”。

一个或多个?不确定 Postgres 是否强制执行唯一性,我手头没有 9.3 安装。

使用 Postgres 9.3,您的查询可能如下所示:

选择 *
来自 tbl
WHERE json ->> 'category' LIKE '%Category%'

->>..“将 JSON 对象字段作为文本获取”

用于ILIKE不区分大小写的搜索。

更多相关答案:
如何使用新 PostgreSQL JSON 数据类型中的字段进行查询?

于 2013-07-17T00:27:30.550 回答
2

可以使用图书馆吗?“通用模式”库提供了一个功能,可以满足您的需求:

http://common-schema.googlecode.com/svn/trunk/common_schema/doc/html/extract_json_value.html

于 2013-07-17T00:55:58.647 回答
1

也许我问了一个非常糟糕的问题,因为我可以使用 Regexp 进行搜索。

我找到了这个解决方案。也许这不是最快的方法,但可以满足我的需要:

select * from table where json regexp '"category":"([^"]*)Category([^"]*)"';

谢谢

于 2013-07-17T01:12:44.393 回答
0

我希望这有帮助。

select * from table where json @> '{"category":"Category Example"}';
于 2019-12-12T22:04:23.310 回答