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中,这看起来并不难做到。不过,需要对语义进行详细阐述,以涵盖两个数组之间元素或维度数量不同的情况。谢谢。我将探索一些几何数据类型,看看是否在那里找不到什么。