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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 评估数组是否包含给定元素以外的元素_Arrays_Postgresql_Plpgsql - Fatal编程技术网

Arrays 评估数组是否包含给定元素以外的元素

Arrays 评估数组是否包含给定元素以外的元素,arrays,postgresql,plpgsql,Arrays,Postgresql,Plpgsql,我试图确定给定的数组_servicetype是否包含12,1,2,3以外的元素。 以下是我到目前为止的情况 场景1:如果我的数组是{1,2,36015},我希望为FALSE 场景2:如果我的数组是{1,2,12},我希望为TRUE 场景3:如果我的数组是{1,2},我希望为true 我最终在Postgres中将iif语句创建为用户定义的函数,并得到以下结果: IIF(_servicetype@>ARRAY['12']::INT[] OR _servicetype@>ARRAY[

我试图确定给定的数组_servicetype是否包含12,1,2,3以外的元素。 以下是我到目前为止的情况

场景1:如果我的数组是{1,2,36015},我希望为FALSE

场景2:如果我的数组是{1,2,12},我希望为TRUE

场景3:如果我的数组是{1,2},我希望为true

我最终在Postgres中将iif语句创建为用户定义的函数,并得到以下结果:

 IIF(_servicetype@>ARRAY['12']::INT[]
  OR _servicetype@>ARRAY['1'] ::INT[]
  OR _servicetype@>ARRAY['2'] ::INT[]
  OR _servicetype@>ARRAY['3'] ::INT[],TRUE,FALSE)::BOOLEAN 
我担心的是它不适用于场景1。

您可以使用@>contains/covers操作符检查数组[12,1,2,3]是否是\u servicetype的超集,即如果\u supertype包含数组中没有的任何内容[12,1,2,3],则返回false:


明白了,所以contains操作符单独查看每个元素。我的印象是contains操作符将数组视为一个整体。学到了一些东西!thanks@DanielL.VanDenBosch:当你说contains操作符将数组视为一个整体时,我不确定我是否理解了你的意思,但是如果你的意思是你认为该操作考虑了切片重叠,那么事实并非如此。我更新了我的答案来展示一个例子。你的数组能包含空值吗?然后是标准数组运算符@>,
WITH examples(_servicetype) AS (
  VALUES 
    ('{1,2,3,6015}'::int[]),
    ('{2,1}'::int[]),
    ('{1}'::int[])
)
SELECT _servicetype, '{12, 1, 2, 3}' @> _servicetype
FROM examples;
┌──────────────┬──────────┐
│ _servicetype │ ?column? │
├──────────────┼──────────┤
│ {1,2,3,6015} │ f        │
│ {2,1}        │ t        │  -- set-wise "contains", order does not matter
│ {1}          │ t        │
└──────────────┴──────────┘
(3 rows)