不区分大小写的Postgres查询,包含数组

ime

我有包含这样的标签数组的记录:

   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]]

这将返回该表中的第一条记录。

这样做的问题是,我有混合型的情况下,我想这回同样的结果,如果我搜索:bridgephotocolors本质上,我需要使此搜索不区分大小写,但找不到使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章