[firebase-br] RES: RES: Consulta SQL

Mauri Lima GMail mauri.lima.roraima em gmail.com
Sáb Nov 29 15:30:32 -03 2014


Bom dia,

    Desculpe pela demora, Não sei porque meus email estão demorando uma
eternidade para postar na lista.
    Mas tem between sim.
Veja neste trecho copiado da sua mensagem/resposta abaixo

---->                                    *******
MLG>>            WHERE ( d.DATADOCUMENTO Between cast('20.11.2014' as date)
                                         *******
MLG>              And
MLG>> cast('21.11.2014' as date) ) AND
MLG>>                  ((d.Historico like 'LICENCA%') and (d.TipoCodigo =
MLG> '0001'))
<----
   O comando SQL trata apenas da tabela documento.

Abaixo metadado da tabela Documento migrada de um grande porte Ibm para
firebird
//
----------------------------------------------------------------------------
-------------
/* Domain definitions */
CREATE DOMAIN "DOCUMENTONUMERO" AS CHAR(16) CHARACTER SET WIN1252;
CREATE DOMAIN "ORGAOCODIGO" AS CHAR(10) CHARACTER SET WIN1252;

/* Table: DOCUMENTO, Owner: SYSDBA */

CREATE TABLE "DOCUMENTO" 
(
  "PROTOCOLO"	 INTEGER NOT NULL,
  "TIPOCODIGO"	 CHAR(4) CHARACTER SET WIN1252 NOT NULL,
  "ORGAOCODIGO"	 ORGAOCODIGO  NOT NULL,
  "MODALIDADECODIGO"	 CHAR(3) CHARACTER SET WIN1252,
  "UCIDUSER"	 INTEGER,
  "DOCUMENTONUMERO"	 DOCUMENTONUMERO  NOT NULL,
  "ORIGEM"	 VARCHAR(100) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  "DATA"	 DATE,
  "HORA"	 TIME,
  "PRAZO"	 INTEGER,
  "ESTATUS"	 CHAR(1) CHARACTER SET WIN1252,
  "OBSERVACAO"	 VARCHAR(120) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  "ORGAOATUAL"	 VARCHAR(10) CHARACTER SET WIN1252,
  "VALOR"	 NUMERIC(12,2),
  "DESCRICAO"	 VARCHAR(100) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  "HISTORICO"	 VARCHAR(250) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  "NUMEROESTADO"	 INTEGER,
  "NUMEROPROCESSO"	 INTEGER,
  "ANOPROCESSO"	 SMALLINT,
  "DATADOCUMENTO"	 DATE,
  "PALAVRACHAVE"	 VARCHAR(40) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  "VOLUMES"	 SMALLINT,
  "DIGITO"	 SMALLINT,
  "APENSO"	 VARCHAR(100) CHARACTER SET WIN1252,
  "ANEXO"	 VARCHAR(100) CHARACTER SET WIN1252 COLLATE WIN_PTBR,
  "QTDPECAS"	 SMALLINT,
  "DESTINOORIGEM"	 VARCHAR(100) CHARACTER SET WIN1252 COLLATE
WIN_PTBR,
  "CPF"	 VARCHAR(11) CHARACTER SET WIN1252,
  "ADTIVO"	 NUMERIC(12,2),
  "ADTIVO2"	 NUMERIC(12,2),
  "DATACADASTRO"	 DATE,
  "DATAALTERACAO"	 DATE,
  "IDUSERALTERA"	 INTEGER,
  "MATRICULA"	 VARCHAR(30) CHARACTER SET WIN1252,
 PRIMARY KEY ("PROTOCOLO")
);

/*  Index definitions for DOCUMENTO */

CREATE INDEX "IDX_DOCUMENTO1" ON "DOCUMENTO"("DESCRICAO");
CREATE INDEX "IDX_DOCUMENTO2" ON "DOCUMENTO"("DOCUMENTONUMERO",
"TIPOCODIGO");
CREATE INDEX "IDX_DOCUMENTO4" ON "DOCUMENTO"("ORGAOCODIGO");
CREATE INDEX "IDX_DOCUMENTO6" ON "DOCUMENTO"("MODALIDADECODIGO");
CREATE INDEX "IDX_DOCUMENTO_2" ON "DOCUMENTO"("DATA");
CREATE INDEX "IDX_DOCUMENTO_3" ON "DOCUMENTO"("DATADOCUMENTO");
CREATE INDEX "IDX_DOCUMENTO_4" ON "DOCUMENTO"("NUMEROPROCESSO",
"ANOPROCESSO");
CREATE INDEX "IDX_ORIGEM" ON "DOCUMENTO"("ORIGEM");
CREATE INDEX "PROTCOLOCPF" ON "DOCUMENTO"("CPF");
ALTER TABLE "DOCUMENTO" ADD FOREIGN KEY ("TIPOCODIGO") REFERENCES "TIPO"
("TIPOCODIGO");
ALTER TABLE "DOCUMENTO" ADD FOREIGN KEY ("ORGAOCODIGO") REFERENCES "ORGAO"
("ORGAOCODIGO") ;
ALTER TABLE "DOCUMENTO" ADD FOREIGN KEY ("MODALIDADECODIGO") REFERENCES
"MODALIDADE" ("MODALIDADECODIGO");
ALTER TABLE "DOCUMENTO" ADD FOREIGN KEY ("UCIDUSER") REFERENCES "UCTABUSERS"
("UCIDUSER");
SET TERM ^ ;



-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Carlos H. Cantu
Enviada em: sábado, 29 de novembro de 2014 12:35
Para: FireBase
Assunto: Re: [firebase-br] RES: Consulta SQL

Não to entendendo, nos exemplos que vc mandou não tinha between.

Que tal vc postar a metadata das tabelas envolvidas, as formas das
consultas que vc tentou e o resultado obtido com cada uma delas.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

MLG> Complementando:
MLG>  O erro so ocorre quando do uso do between, se o mesmo não estiver
presente
MLG> na sentença sql, o resultado e normal, isto e, retorna as linhas da
MLG> consulta.


MLG> -----Mensagem original-----

MLG> Qual o charset e o collate definido para o campo d.Historico no
MLG> Firebird?

MLG> []s
MLG> Carlos H. Cantu
MLG> www.FireBase.com.br - www.firebirdnews.org
MLG> www.warmboot.com.br - blog.firebase.com.br

MLG>> Boa tarde pessoal,

MLG>>  Aproveitando o gancho.....

MLG>>   Ve se alguem pode me ajudar neste erro um tanto quanto "ninja" no
MLG> firebird
MLG>> 2.53

MLG>>   Nos select abaixo o mesmo retorna os registros de forma correta:
MLG>>   obs. O grande numero de pareteses foi para tentar resolver o
problema
MLG>>   Select * from DOCUMENTO d
MLG>>            WHERE ( d.DATADOCUMENTO Between cast('20.11.2014' as date)
MLG> And
MLG>> cast('21.11.2014' as date) ) AND
MLG>>                  ((d.Historico like 'LICENCA%') and (d.TipoCodigo =
MLG> '0001'))


MLG>>   Agora no select abaixo onde so acrescentei ' ME%' o mesmo nao
MLG> seleciona
MLG>> nehum registro da tabela retorna vazio:
MLG>>    Select * from DOCUMENTO d
MLG>>             WHERE ( d.DATADOCUMENTO Between cast('20.11.2014' as date)
MLG> And
MLG>> cast('21.11.2014' as date) ) AND
MLG>>                   ((d.Historico like 'LICENCA ME%') and (d.TipoCodigo
=
MLG>> '0001'))
MLG>>                                   

MLG>>  Fiz um teste no Postgresql usando a mesma tabela e os mesmo dado, os
MLG> dois
MLG>> comandos são executados de forma correta,     
MLG>>  retornando os dados (com a diferencça no firebird do collate PTBR que
MLG> traz
MLG>> ç e c de forma correta)


MLG>>  Sera que isso pode ser um pequeno bug no firebird  . Alguma ideia??
MLG>>  Tambem testei em dois servidores diferentes e o resultado foi o
mesmo.
MLG>>  
MLG>>  Firebird 2.53
MLG>>  Win 7
MLG>>  Windows Server 2003 
MLG>>                         
MLG>> Mauri Lima de Oliveira
MLG>> Boa Vista - Roraima





Mais detalhes sobre a lista de discussão lista