Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 带无穷大的Postgres WHERE子句_Postgresql - Fatal编程技术网

Postgresql 带无穷大的Postgres WHERE子句

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子句?添加

我在表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子句?

添加逻辑以允许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