Postgresql 带无穷大的Postgres WHERE子句
我在表x上有以下WHERE子句,其中列1为整数。 在带有参数(a整数、b整数)的函数中调用SELECT 调用函数:Postgresql 带无穷大的Postgres WHERE子句,postgresql,Postgresql,我在表x上有以下WHERE子句,其中列1为整数。 在带有参数(a整数、b整数)的函数中调用SELECT 调用函数: SELECT * FROM function(0, 10) 功能中的脚本: SELECT * FROM tablex x WHERE x.column1 between a and b 现在我错过了column1为null的结果,但在本例中,获取这些结果很重要。取决于谁调用该函数。参数“a”应该是什么才能获得空值。或者是否有一种方法可以根据即将到来的参数禁用where子句?添加
SELECT * FROM function(0, 10)
功能中的脚本:
SELECT * FROM tablex x WHERE x.column1 between a and b
现在我错过了column1为null的结果,但在本例中,获取这些结果很重要。取决于谁调用该函数。参数“a”应该是什么才能获得空值。或者是否有一种方法可以根据即将到来的参数禁用where子句?添加逻辑以允许null
column1
值:
SELECT *
FROM tablex x
WHERE x.column1 BETWEEN a AND b OR x.column1 IS NULL;
要使空值表现为实际值,请反转逻辑。 [并在代码中添加注释,因为否定可能会混淆未来的读者/维护者]:
从表格x中选择*,其中非x.column1=b;
注:以上假设您希望
a
和b
中的null分别被视为-inf
和+inf
。我找到了一个很好的解决方案:
SELECT * FROM tablex x WHERE coalesce(x.column1, 0) between a and b
当我用a=1和b=10调用函数时,这不起作用。我不想得到x.column1为空的行。您可以指定在哪些情况下需要空值,在哪些情况下不需要空值吗?PS:“无穷大”与空值有什么关系?这看起来很优雅,但请检查查询计划(该函数可能会导致索引不可用),请添加示例数据来解释您的问题。
SELECT * FROM tablex x WHERE coalesce(x.column1, 0) between a and b