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(?) )
我想在查询中使用数组作为过滤器,而且,如果没有提供任何值,我还需要 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(?) )