Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Arrays Postgres数组比较混淆_Arrays_Postgresql_Comparison_Aggregate Functions - Fatal编程技术网

Arrays Postgres数组比较混淆

Arrays Postgres数组比较混淆,arrays,postgresql,comparison,aggregate-functions,Arrays,Postgresql,Comparison,Aggregate Functions,当我跑的时候 select array[19,21,500] <= array[23,5,0]; select array[24,21,500] <= array[23,5,0]; 我明白了 但是当我跑的时候 select array[19,21,500] <= array[23,5,0]; select array[24,21,500] <= array[23,5,0]; 我猜错了。这表明比较仅限于第一个元素 我想知道是否有一个操作符或可能的函数来比较所

当我跑的时候

select array[19,21,500] <= array[23,5,0]; 
select array[24,21,500] <= array[23,5,0]; 
我明白了

但是当我跑的时候

select array[19,21,500] <= array[23,5,0]; 
select array[24,21,500] <= array[23,5,0]; 
我猜错了。这表明比较仅限于第一个元素

我想知道是否有一个操作符或可能的函数来比较所有条目,这样,如果左数组中的所有条目在同一索引处小于右数组中的条目,它将返回true,否则返回false


我希望检索整个数组小于或大于给定数组的所有行。我不知道这是否可行。

数组使用序数作为基本属性。换言之,{1,3,2}'{1,2,3}',这在比较时很重要。这些方法着眼于连续的元素

想象一下PostgreSQl没有inet类型。我们可以使用int[]指定cidr块。例如,我们可以将其视为“{10,0,0,1,8}”,表示10.0.0.1/8。然后我们可以用这种方法比较IP地址。我们也可以用bigint表示:“{167772161,8}”在这种比较中,如果您有两个具有不同子网的IP地址,我们可以对它们进行比较,具有更特定子网的IP地址将位于具有更少特定子网的IP地址之后

数据库规范化的一个基本原则是,每个字段都应该为其域保存一个且仅保存一个值。数组不一定违反这一原则的一个原因是,因为它们具有顺序性,因此充当元组而不是集合或包,所以可以使用它们来表示奇异值。在这种情况下,比较是非常有意义的


如果您想创建一个不遵守常规的运算符,您可以创建自己的运算符。基本上,您可以创建一个函数,根据这两个函数返回bool,然后将其包装到操作符中。有关如何执行此操作的详细信息,请参阅文档中的CREATE操作符。您决不受PostgreSQL开箱即用功能的限制。

要实际执行您要求的操作,请与以下内容并行使用并聚合:


两个数组都需要具有相同数量的基本元素才能并行取消嵌套。否则会得到一个交叉连接,即一个完全不同的结果。

它不是第一个元素,而是第一个不同的元素,作为字符串比较中的连续字符。根据文档:没有内置的操作符可以做你想做的事情,但是没有任何东西可以阻止你写一个。至少在过程代码plpgsql中,这看起来并不难做到。不过,需要对语义进行详细阐述,以涵盖两个数组之间元素或维度数量不同的情况。谢谢。我将探索一些几何数据类型,看看是否在那里找不到什么。