在WHERE子句中访问多维数组

时间:2016-04-21 18:59:53

标签: sql arrays postgresql multidimensional-array

我有一个函数,我传入一个多维数组以在WHERE子句中使用。我想我可能不得不使用FOR LOOP但不确定。

如何在查询中访问传入的参数?

CREATE OR REPLACE FUNCTION public.select_locations(coordinates TEXT[][])
 RETURNS SETOF public.locations AS
$BODY$

DECLARE item public.locations;

BEGIN
   select * INTO item from public.locations where latitude, longitude NOT IN coordinates;

   RETURN item;
END

$BODY$
  LANGUAGE PLPGSQL VOLATILE
   COST 100;

测试电话:

 select * from
 public.select_locations


(Array[array['42.449630','-123.758012'],array['42.456591','-123.844708']]);

1 个答案:

答案 0 :(得分:0)

要返回不在坐标arg中的位置的每一行(如果我理解你想要的东西),你可以执行以下操作:

CREATE OR REPLACE FUNCTION public.select_locations(coordinates TEXT[][])
  RETURNS SETOF public.locations AS
$BODY$
  DECLARE item public.locations;
BEGIN
  for item in select * from public.locations where array[latitude,longitude] not in (SELECT array[coordinates[i][1], coordinates[i][2]] FROM
generate_series(array_lower(coordinates,1),array_upper(coordinates,1)) i) loop
    return next item;
  end loop;
return;
END
$BODY$
  LANGUAGE PLPGSQL VOLATILE
  COST 100;

表格位置的纬度和经度为文本类型列。 PostgreSQL版本9.1。