我在这里,在谷歌上或在文档中找不到答案
如果:
value = {"Foo","bar","bAz"}
我需要
SELECT value FROM table WHERE 'foo' = ANY(value)
匹配.
我try 了很多lower()的组合,但没有成功.
ILIKE
而不是=
似乎有效,但我一直对LIKE
感到紧张——这是最好的方式吗?
我在这里,在谷歌上或在文档中找不到答案
如果:
value = {"Foo","bar","bAz"}
我需要
SELECT value FROM table WHERE 'foo' = ANY(value)
匹配.
我try 了很多lower()的组合,但没有成功.
ILIKE
而不是=
似乎有效,但我一直对LIKE
感到紧张——这是最好的方式吗?
一个未提及的替代方案是安装PostgreSQL 8.4+附带的the citext
extension,并使用citext
的数组:
regress=# CREATE EXTENSION citext;
regress=# SELECT 'foo' = ANY( '{"Foo","bar","bAz"}'::citext[] );
?column?
----------
t
(1 row)
如果你想严格地纠正这一点,避免扩展,你必须做大约pretty ugly subqueries次,因为Pg没有很多丰富的数组操作,尤其是没有函数映射操作.比如:
SELECT array_agg(lower(($1)[n])) FROM generate_subscripts($1,1) n;
... 其中$1是数组参数.在你的情况下,我认为你可以作弊一点,因为你不在乎保持数组的顺序,所以你可以做如下事情:
SELECT 'foo' IN (SELECT lower(x) FROM unnest('{"Foo","bar","bAz"}'::text[]) x);