Thread: BROBLEM IN BETWEEN QUERY (plpgsql)

BROBLEM IN BETWEEN QUERY (plpgsql)

From
"Anoop G"
Date:
hai all,<br /><br />    I have  a  plpgsql function and I am using   postgresl 8.1.9<br /><br /><br />CREATE OR REPLACE
FUNCTIONget_vehicle_id(INT) RETURNS SETOF RECORD AS $BODY$<br />DECLARE<br /><br />    r RECORD;<br />        int_day 
ALIASFOR $1;<br /><br />BEGIN<br /><br />     FOR r in SELECT fk_bint_old_vehicle_number AS vehicle_id<br />     FROM
tbl_rac_vehicle_replacement<br/>     WHERE dat_replacement BETWEEN now() - interval '% day',int_day <br />     AND
now()LOOP<br />              <br />             RETURN NEXT r;<br />     END LOOP;<br />     <br />     RETURN;<br
/>END<br/>$BODY$ LANGUAGE 'plpgsql';<br /><br /><br />   But i cant craete the function  The error message is:<br /><br
/><br/>ERROR:  syntax error at or near "," at character 137<br /> QUERY:   SELECT fk_bint_old_vehicle_number AS
vehicle_idFROM tbl_rac_vehicle_replacement WHERE dat_replacement BETWEEN now() - interval '% day', $1  AND now()<br
/>CONTEXT: SQL statement in PL/PgSQL function "test" near line 11<br /> LINE 1: ...E dat_replacement BETWEEN now() -
interval'% day', $1  AND ...<br /><br /><br /><br /><br />The problem line is  BETWEEN now() - interval '% day', $1 
ANDnow()<br /><br />I want to select  dat_replacement  between now ()  and now - 5 dyas or now -7 days like that  i
wantto pass the integer value as argument to the function.<br /><br /><br />I also tried like this  WHERE
dat_replacementBETWEEN now() - interval int_day day <br />     AND now(),but it also failed.<br /><br /><br />    
Pleasehelp me .<br /><br />  regards:<br />              Anoop<br /><br />              <br /><br /><br /><br /><br
/><br/>    <br /><br />   <br /><br /><br />                  <br /> 

Re: BROBLEM IN BETWEEN QUERY (plpgsql)

From
"A. Kretschmer"
Date:
am  Thu, dem 03.04.2008, um 15:54:56 +0530 mailte Anoop G folgendes:
> hai all,
> I want to select  dat_replacement  between now ()  and now - 5 dyas or now -7
> days like that  i want to pass the integer value as argument to the function.

I show you a similar solution:

test=*# select * from foo;i |              ts
---+-------------------------------1 | 2008-03-31 15:11:36.214272+02
(1 row)

test=*# create or replace function f1(in i int, out t timestamptz) returns setof timestamptz as $$
declare r record;s timestamptz;
begin s:=current_timestamp-i * '1day'::interval;  for r in select * from foo where ts between s and current_timestamp
loop   raise notice '--> %',$1;   t:=r.ts;    return next;  end loop;  raise notice '%',s;
 
end;
$$ language plpgsql;
CREATE FUNCTION
test=*# select * from f1(1);
NOTICE:  2008-04-02 13:05:08.48866+02t
---
(0 rows)

test=*# select * from f1(10);
NOTICE:  --> 10
NOTICE:  2008-03-24 13:05:08.48866+01              t
-------------------------------2008-03-31 15:11:36.214272+02
(1 row)

More examples with IN/OUT - parameters:
http://people.planetpostgresql.org/xzilla/index.php?/archives/149-out-parameter-sql-plpgsql-examples.html#extended


HTH, Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID:   0x3FFF606C, privat 0x7F4584DA   http://wwwkeys.de.pgp.net