<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Funkcja contains dla tablic]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=271</link>
		<description><![CDATA[Najświeższe odpowiedzi w Funkcja contains dla tablic.]]></description>
		<lastBuildDate>Tue, 18 Aug 2009 11:23:20 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Funkcja contains dla tablic]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1151#p1151</link>
			<description><![CDATA[Będziesz potrzebował własnej funkcji i może operatora. To moge zaproponowac na szybkiego (ale rozwiązanie nie jest perfekcyjne, nie podales co moga zawierac tablice, tu załozyłem ze nie moga zawierac znaku '*')
[code]
drop function contains(anyarray,anyarray) cascade;
create or replace function contains (a anyarray, b anyarray) returns boolean  as $$
declare
string varchar;
tab1 varchar;
tab2 varchar;
begin
select into tab1 array_to_string(m,' ') from (select array(select(a)[i]
        from generate_series(1,array_upper(a,1)) i order by 1) as m) foo2;

select into tab2 array_to_string(m,'*') from (select array(select(b)[i]
        from generate_series(1,array_upper(b,1)) i order by 1) as m) foo2;

select into string regexp_replace(tab1,tab2,'$');

if string like '%$%'
        then return true;
end if;
return false;
end;
$$
language plpgsql;

create operator === (
        leftarg = anyarray,
        rightarg = anyarray,
        commutator = ===,
        procedure = contains);
[/code]
i sposob uzycia 
[code]
postgres=# select 1 as result where array[1,2,3,4] === array[1,3,2];
 result 
--------
      1
(1 row)

postgres=# select 1 as result where array[1,2,3,4] === array[1,3,5];
 result 
--------
(0 rows)
[/code]

Mam nadzieje ze sie nigdzie nie walnąłem :).]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Tue, 18 Aug 2009 11:23:20 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1151#p1151</guid>
		</item>
		<item>
			<title><![CDATA[Funkcja contains dla tablic]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1150#p1150</link>
			<description><![CDATA[Potrzbuje wrzucic do zapytania operator zawierania jednej tablicy w drugiej. W nowych wersjach (od 8.2) Pgsql jest to operator "@>" ale ja musze to zrobić na wersji 8.1 (taki hosting :( ). Wiem może ktoś jak to zrobić ??]]></description>
			<author><![CDATA[dummy@example.com (wojtek)]]></author>
			<pubDate>Tue, 18 Aug 2009 07:04:10 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1150#p1150</guid>
		</item>
	</channel>
</rss>
