我有包含这样的标签数组的记录:
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(字符变化[])不存在
提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
您可以按照以下方式将文本数组元素转换为小写:
select lower(tags::text)::text[]
from listings;
lower
--------------------------
{bridge,photo,colors}
{recorder,zoom}
{reiciendis,praesentium}
{quia}
(4 rows)
在查询中使用此命令:
SELECT *
FROM listings
WHERE lower(tags::text)::text[] @> ARRAY['bridge', 'photo', 'colors']
ORDER BY id ASC;
id | title | tags
--------+--------------+-----------------------
124009 | bridge photo | {bridge,photo,Colors}
(1 row)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句