Olá comunidade. Estou desenvolvendo uma função que recebe dois parâmetros: nome 
da estação (que é uma sigla) e a data do relatório.

Preciso comparar uma data selecionada pelo usuário (no formato dd/mm/yyyy) com 
a data que está na tabela "pas_r" no formato "timestamp with time zone"

(ex: "2008-04-14 16:32:18-03"). Tentei rodar a função, mas plpgsql não aceitou 
a sintaxe.

 

PROBLEMA:

 

- Minha função não roda; já fica no parse da sintaxe. O que está errado? Como 
corrigir? Existe uma forma melhor?

 

DÚVIDAS:

 

- Como faço para extrair apenas a data do formato "timestamp with time zone" ? 
Ou a única forma é fazer como estou tentando fazer (ex: EXTRACT(DAY FROM 
TIMESTAMP WITH TIME ZONE record2."bh_dthr_ini") = dia)

 

- Como faço para comparar datas? Em qual formato devo fazer isso, pois o 
usuário entra com a data dd/mm/yyyy e data na "pas_r" está formato yyyy-mm-dd. 
Qual é a melhor forma de comparar essas informações caso eu consiga extrair a 
data de record2."bh_dthr_ini".

 

 

Pesquisei na lista e procurei na doc, porém não consegui resolver. Peço ajuda 
da comunidade, pois estou começando a usar esse SGBD. 

No aguardo online e agradeço pela atenção.

http://www.postgresql.org/docs/8.2/interactive/functions-datetime.html

http://www.postgresql.org/docs/8.2/interactive/functions-formatting.html

 

 

CREATE OR REPLACE FUNCTION aux(character, date)

  RETURNS integer AS

$BODY$

 

DECLARE 

record1 RECORD;

record2 RECORD;

subestacao ALIAS FOR $1; 

data ALIAS FOR $2; 

 

dia float;

mes float;

ano float;

 

BEGIN

 

dia := 17;

mes := 6;

ano := 2008;

--dia := FUNCAO_PARA_EXTRAIR_DIA_DE_DATA();

--mes := FUNCAO_PARA_EXTRAIR_MES_DE_DATA();

--ano := FUNCAO_PARA_EXTRAIR_ANO_DE_DATA();

 

FOR record1 IN SELECT * FROM "subest-equi" LOOP

    

            FOR record2 IN SELECT * FROM "pas_r" WHERE id = record1."id-equip" 
AND 

                        EXTRACT(DAY FROM TIMESTAMP WITH TIME ZONE 
record2."bh_dthr_ini") = dia AND

                        EXTRACT(MONTH FROM TIMESTAMP WITH TIME ZONE 
record2."bh_dthr_ini") = mes AND

                        EXTRACT(YEAR FROM TIMESTAMP WITH TIME ZONE 
record2."bh_dthr_ini")  = ano LOOP

                        

                        RAISE NOTICE 'Saida %',record2."id";

               

            END LOOP;

    

END LOOP;

 

RETURN 1;

END;

 

$BODY$

  LANGUAGE 'plpgsql' VOLATILE;

ALTER FUNCTION aux(character, date) OWNER TO postgres;

 

 

CREATE TABLE "subest-equi"

(

  "subest-nome" character varying(10) NOT NULL,

  "id-equip" character varying(20) NOT NULL,

  "nome-equip" character varying(20) NOT NULL,

  flag bit(1),

  CONSTRAINT "primary-key" PRIMARY KEY ("subest-nome", "id-equip")

)

WITH (OIDS=FALSE);

ALTER TABLE "subest-equi" OWNER TO sage;

 

CREATE TABLE pas_r

(

  bh_dthr_ini timestamp with time zone,

  bh_dthr_fim timestamp with time zone,

  bh_sinonimo integer,

  bh_chave integer,

  bh_indtr integer,

  eqp character(18),

  estacao character(12),

  histper smallint,

  id character(24),

  nome character(42),

  tac character(12),

  tipoe smallint,

  tpeqp smallint

)

WITH (OIDS=FALSE)

TABLESPACE sagebhref;

ALTER TABLE pas_r OWNER TO sage;

 

 

Newton Teixeira do Nascimento Junior

 

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a