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
