在Postgres的Array Column中使用UPCASE或Regexp



我试图查询Postgres数组列,忽略大小写,甚至可能忽略空格。

SELECT "cats".* FROM "cats" WHERE ('CATS - PERSA' = ANY(UPCASE(cat_types))) ORDER BY "cats"."id" ASC LIMIT 1;

但我得到了这个错误:

You might need to add explicit type casts.

另外,我还想做一个regexp,其中搜索会忽略cat_types列上值中的空格。

我使用RubyonRails来实现这一点。

cat_type.upcase.delete(' ')
Cats.where("'#{cat_type}' = ANY(cat_types)").first 

该查询只使用ANY即可工作,但我希望能够忽略空格并对cat_types中的值进行大写,这样它就有更多的匹配机会。伊利克也有可能。

谢谢。

SELECT DISTINCT c.*
FROM   cats c, unnest(c.cat_types) AS cat_type
WHERE  upper(translate(cat_type, ' ', '')) = 'CATS-PERSA'
ORDER  BY id
LIMIT  1;
  • Postgres函数是upper(),而不是upcase()

  • cat_types似乎是一个数组,假定类型为text[]。I unnest()来单独处理阵列元素。ANY无法做到这一点,因为它只适用于简单的比较。

  • 我在这里使用了一个隐含的LATERAL JOIN,需要Postgres9.3+

  • 如果多个数组元素匹配,则在此处多次获取该行。因此,CCD_。

关于Postgres:中的模式匹配

  • 使用LIKE、SIMILAR TO或正则表达式进行模式匹配

最新更新