【发布时间】:2017-04-16 02:59:13
【问题描述】:
我的记录包含如下标签数组:
id | title | tags
--------+-----------------------------------------------+----------------------
124009 | bridge photo | {bridge,photo,Colors}
124018 | Zoom 5 | {Recorder,zoom}
123570 | Sint et | {Reiciendis,praesentium}
119479 | Architecto consectetur | {quia}
我正在使用以下 SQL 查询按标签('bridge'、'photo'、'Colors')获取特定记录:
SELECT "listings".* FROM "listings" WHERE (tags @> ARRAY['bridge', 'photo', 'Colors']::varchar[]) ORDER BY "listings"."id" ASC LIMIT $1 [["LIMIT", 1]]
这会返回该表中的第一条记录。
问题在于我有混合类型的情况,如果我搜索:bridge、photo、colors,我希望它返回相同的结果。本质上,我需要使这个搜索不区分大小写,但找不到使用 Postgres 的方法。
这是我尝试过的引发错误的 SQL 查询:
SELECT "listings".* FROM "listings" WHERE (LOWER(tags) @> ARRAY['bridge', 'photo', 'colors']::varchar[]) ORDER BY "listings"."id" ASC LIMIT $1
这是错误:
PG::UndefinedFunction: 错误: 函数 lower(character varying[]) 不存在
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
【问题讨论】:
标签: arrays postgresql