postgresql 中的 COALESCE 和 ARRAY - 查询

COALESCE and ARRAY in postgresql - query

我想在查询中使用数组作为过滤器,而且,如果没有提供任何值,我还需要 return 所有值(通过 preparedStatement - java)。

像这样:

AND column = any(coalesce(?, column_example::text[]))

问题是 column_example 是一个 varchar 列。如何用 sql (postgres) 实现这个需求?

版本:

PostgreSQL 11.9 (Ubuntu 11.9-1.pgdg20.04+1) 在 x86_64-pc-linux-gnu 上,由 gcc 编译 (Ubuntu 9.3.0-10ubuntu2) 9.3.0, 64 -位

嗯。 . .两个单独的比较怎么样?

AND
(column = ? OR ? IS NULL AND column = any(column_example::text[]))

您需要将参数传递两次或使用命名参数。

I need to return all values if no values were provided

你可以这样做:

AND ( ? is null or column = any(?::text[]) )

可能不需要将参数转换为数组,具体取决于您的驱动程序是否能够正确传递此类数据类型。如果是:

AND ( ? is null or column = any(?) )