【问题标题】:json where clause in postgresqlpostgresql中的json where子句
【发布时间】:2017-05-28 04:19:26
【问题描述】:

我已在 PostgreSQL 中保存数据,如下所示:

{"tags": "Tag 1,Tag 2,Tag 3"}
{"tags": "Tag 1,Tag 4,Tag 5"}
{"tags": "Tag 6,Tag 1,Tag 2"}

我想要搜索存在“标签 2”或标签 3 的记录?

表架构,创建过程如下,

--create table 
CREATE TABLE "tblIrsInputTagging" ( 
  "IrsInputTaggId" serial NOT NULL, 
  "Irs_tags" json NOT NULL, CONSTRAINT "tblIrsInputTagging_pkey" 
  PRIMARY KEY ("IrsInputTaggId") 
) WITH ( OIDS=FALSE ); 
ALTER TABLE "tblIrsInputTagging" OWNER TO "postgre";

--insert json record 

INSERT INTO "tblIrsInputTagging" ("Irs_tags") 
VALUES ( '{"tags": "Tag 1,Tag 2,Tag 3"}' );

INSERT INTO "tblIrsInputTagging" ("Irs_tags") 
VALUES ( '{"tags": "Tag 1,Tag 4,Tag 5"}' ); 

INSERT INTO "tblIrsInputTagging" ("Irs_tags") 
VALUES ( '{"tags": "Tag 6,Tag 1,Tag 2"}' );

【问题讨论】:

  • 列数据类型为json
  • 那些标签列表,我的意思是,“Tag1,Tag2,Tag3”是一个数组,还是只是一个文本?
  • 它只是一个文本

标签: json postgresql where-clause


【解决方案1】:

我不认为有一些特定的功能可以检查每个 json 项目。但是您可以通过将数据类型转换为文本然后使用likeilike 运算符来检查它。

SELECT col1, col2 FROM table_name WHERE CAST(col1 AS text) ilike '%value%'

注意 col1 列是 json 数据类型。

【讨论】:

    【解决方案2】:

    假设列名是tags。在这种情况下,您可以像下面这样查询。
    如果有什么具体的,请告诉我,所以我可能需要在 sn-p 下面更新。

    SELECT col_1, col_2, .. col_n 
    FROM your_table 
    WHERE tags::json->'tags' ILIKE '%Tag2%'
    OR
    tags::json->'tags' ILIKE '%Tag3%'
    

    【讨论】:

    • 您的 LIKE 模式似乎缺少通配符。
    • 错误:列“Tag2”不存在第 2 行:WHERE “Irs_tags”::json->'tags' ILIKE “Tag2”^ ********** 错误 ** ******** 错误:列“Tag2”不存在 SQL 状态:42703 字符:73
    • 亲爱的 Laurenz Albe,它显示的错误是“标签 2”列不存在,即使它不是列,它是 jason 的标签列内的数据。
    • @NarenderPal 请使用该错误消息更新您的问题正文。
    • 错误:列“%Tag2%”不存在还是同样的错误
    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 2023-01-21
    • 2018-02-06
    • 1970-01-01
    • 2015-07-09
    • 2013-02-28
    • 2018-11-12
    相关资源
    最近更新 更多