我在这里,在谷歌上或在文档中找不到答案

如果:

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);

Postgresql相关问答推荐

Redis作为postgreSQL嵌套数据的缓存

Trunc函数不删除小数

Postgresql我必须创建一个索引还是已经有一个索引了?

使用PGx在围棋中执行多条SQL语句

Docker化的PostgreSQL:FATAL:用户&postgres的密码身份验证失败

PostgreSQL 连接字符串的正则表达式

Prisma:获取连接的活动 Postgresql 模式的名称

使用 pgAdmin 4 v7.4 在 Windows 11 上全新安装 PostgreSQL 15.3-3 无法启动 - 卡在正在加载 pgAdmin 4 v7.4...

Postgres 将分区附加到表的时间太长.想明白为什么

使用 pgx.CopyFrom 将 csv 数据批量插入到 postgres 数据库中

Postgres内部如何计算月份间隔

postgreSQL 中对 utf-8 的 LC_COLLATE 和 LC_CTYPE 支持

如何使 Java 和 Postgres 枚举一起工作以进行更新?

Postgis 中 2 点之间的距离,单位为 4326 米

你如何在postgresql中做mysqldump?

如何删除 Postgres 上的所有数据库?

如何在postgresql中编写关于最大行数的约束?

在 postgresql 中对使用 array_agg 创建的文本聚合进行排序

在 pg_restore 期间排除表

错误:permission denied for language c