Re: PL/pgSQL syntax for strings
| От | Edward Grabczewski |
|---|---|
| Тема | Re: PL/pgSQL syntax for strings |
| Дата | |
| Msg-id | 9s0u0a$1tcj$1@news.tht.net обсуждение исходный текст |
| Ответ на | Re: PL/pgSQL syntax for strings (Roberto Mello <rmello@cc.usu.edu>) |
| Список | pgsql-sql |
I've sorted this one thanks to John Berkus.
Thanks guys. I've included the solution below
for your interest.
=======================================================
DROP TABLE rtest;
DROP INDEX rtest_xz_index;
DROP INDEX rtest_yz_index;
DROP INDEX rtest_xy_index;
CREATE TABLE rtest ( xz BOX, yz BOX, xy BOX);
CREATE INDEX rtest_xz_index ON rtest USING RTREE (xz bigbox_ops);
CREATE INDEX rtest_yz_index ON rtest USING RTREE (yz bigbox_ops);
CREATE INDEX rtest_xy_index ON rtest USING RTREE (xy bigbox_ops);
DROP FUNCTION cube (float,float,float, float,float,float);
CREATE FUNCTION cube (float,float,float,float,float,float)
RETURNS text
AS 'DECLARE x1 ALIAS FOR $1; y1 ALIAS FOR $2; z1 ALIAS FOR $3; x2 ALIAS FOR $4; y2 ALIAS FOR $5;
z2 ALIAS FOR $6; xz_ BOX; yz_ BOX; xy_ BOX; left VARCHAR; right VARCHAR; BEGIN left
:=to_char(x1,''99999.999'') || '','' ||
to_char(z1,''99999.999''); right := to_char(x2,''99999.999'') || '','' ||
to_char(z2,''99999.999''); xz_ := left || '','' || right;
left := to_char(y1,''99999.999'') || '','' ||
to_char(z1,''99999.999''); right := to_char(y2,''99999.999'') || '','' ||
to_char(z2,''99999.999''); yz_ := left || '','' || right;
left := to_char(x1,''99999.999'') || '','' ||
to_char(y1,''99999.999''); right := to_char(x2,''99999.999'') || '','' ||
to_char(y2,''99999.999''); xy_ := left || '','' || right;
INSERT INTO rtest(xz,yz,xy) VALUES (xz_, yz_, xy_); RETURN null; END;'
LANGUAGE 'plpgsql';
SELECT cube(1,2,3,10,20,30);
SELECT * FROM rtest
ORDER BY xz USING <<;
SELECT xy, yz, xz FROM rtest
WHERE xz @ '(0.0,0.0),(2.5,2.5)'::box
AND yz @ '(0.0,0.0),(2.5,2.5)'::box
AND xy @ '(0.0,0.0),(2.5,2.5)'::box
ORDER BY xy USING <<;
В списке pgsql-sql по дате отправления: