【问题标题】:SQL LIKE operator to find words in stored JSONSQL LIKE 运算符在存储的 JSON 中查找单词
【发布时间】:2013-07-15 07:56:28
【问题描述】:

我将此 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 谢谢

【问题讨论】:

  • 您应该将该数据存储在表中而不是列中。
  • 您使用的是什么 DBMS?可能有一些工具可以帮助解决这个问题(例如,最新版本的 Postgres 包含 JSON 数据类型)。但是,正如 Musa 所说,执行此类查询的需要确实表明将数据规范化为自己的完整表是一个好主意。
  • categories with "Category" wordcategories with "Category word",会是哪个?
  • 我正在使用 MySQL,正如 Musa 所说,最好的方法是使用表。但是,此时我必须将数据存储为 JSON。

标签: sql json sql-like


【解决方案1】:

虽然未声明,但这看起来像是 Postgres 问题。

当前版本 9.2 中几乎没有任何 JSON 处理工具。 但a whole set of tools 将与即将推出的 Postgres 9.3 currently in beta 一起提供。

我将您的问题解释为:

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

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

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

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

->> .. "获取 JSON 对象字段为文本"

使用ILIKE 进行不区分大小写的搜索。

更多相关答案:
How do I query using fields inside the new PostgreSQL JSON datatype?

【讨论】:

  • 我不知道。我现在正在使用 MySQL。无论如何,+1 以获得有用的答案。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    谢谢

    【讨论】:

      【解决方案4】:

      我希望这会有所帮助。

      select * from table where json @> '{"category":"Category Example"}';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-05
        • 2020-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多