Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аналог IN для массивов 
:(
    Опции темы
Ururu
Дата 8.6.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 27.1.2009

Репутация: нет
Всего: нет



День добрый. Если запрос SELECT возвращает несколько записей, то присутствие среди них нужной можно проверить оператором IN. Я наивно полагал, что наличие нужного элемента в массиве также можно проверить с помощью IN, но не тут-то было! Может кто знает аналог IN для массивов? 
PM MAIL   Вверх
msr
Дата 9.6.2009, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.4.2009

Репутация: 1
Всего: 1



на любой вкус

Код

select ARRAY[4,5,6] && ARRAY[5,6]
  
 select ARRAY[4,5,6] @> '{5}'
 
 select ARRAY[4,5,6] @> '{5,4}'
  
 select ARRAY[4,5,6] @> ARRAY[5,6]
 
 select  ARRAY[4,5,6] &&  ARRAY(select generate_series(4,5))
 
 select   ARRAY(select generate_series(1,5)) @>  ARRAY(select 2)
 
 
 CREATE OR REPLACE FUNCTION "arr_to_table" (arr "pg_catalog"."anyarray") 
 RETURNS SETOF "pg_catalog"."anyelement" AS
$body$
declare
  i int;
  ub int;
BEGIN
ub:=array_upper(arr,1);
if ub then
  for i in 1..ub  loop 
    return next arr[i];
  end loop;
end if;
END;
$body$
LANGUAGE 'plpgsql';
 
 select  4 in (select * from arr_to_table( ARRAY[4,5,6]))
 
CREATE OR REPLACE FUNCTION "op_in_arr" (elem "pg_catalog"."anyelement", arr "pg_catalog"."anyarray") RETURNS boolean AS
$body$
select $2 @>  array(select $1);
$body$
LANGUAGE 'sql'; 
 
CREATE OPERATOR public.?= ( PROCEDURE = "op_in_arr", 
LEFTARG = anyelement, RIGHTARG = anyarray);

select 'ff'::text  ?= array['fgfr','tfg','ff'], 5?=ARRAY[6,4,5,7]



Это сообщение отредактировал(а) msr - 9.6.2009, 02:50
PM MAIL   Вверх
msr
Дата 15.6.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.4.2009

Репутация: 1
Всего: 1



вот еще в догонку
Код

select 5=ANY(array[4,5,6,7])

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.