我试图查询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[]
。Iunnest()
来单独处理阵列元素。ANY
无法做到这一点,因为它只适用于简单的比较。我在这里使用了一个隐含的
LATERAL JOIN
,需要Postgres9.3+。如果多个数组元素匹配,则在此处多次获取该行。因此,CCD_。
关于Postgres:中的模式匹配
- 使用LIKE、SIMILAR TO或正则表达式进行模式匹配