Problemas com filtragem por data.
Não consigo fazer filtragem por data no postgresql.
Tenho uma tabela de comissões de vendedores e preciso fazer o filtro pro data. Quando executo os seguintes comando:
[i:7f22198a6d]select * from com where codven = ´00001´ and (data >= ´01/03/2004´ and data <= ´31/03/2004´) [/i:7f22198a6d]
[b:7f22198a6d]ou [/b:7f22198a6d]
[i:7f22198a6d]select * from com where codven = ´00001´ and data between ´01/03/04´ and ´31/03/04´ [/i:7f22198a6d]
o resultado é o seguinte:
Porém o resultado deveria ser o seguinte:
Gostaria que alguém me auxilia-se dizendo como posso fazer a filtragem por data nesta situação???
Valeu galera, Abraços.
Paulo.
Tenho uma tabela de comissões de vendedores e preciso fazer o filtro pro data. Quando executo os seguintes comando:
[i:7f22198a6d]select * from com where codven = ´00001´ and (data >= ´01/03/2004´ and data <= ´31/03/2004´) [/i:7f22198a6d]
[b:7f22198a6d]ou [/b:7f22198a6d]
[i:7f22198a6d]select * from com where codven = ´00001´ and data between ´01/03/04´ and ´31/03/04´ [/i:7f22198a6d]
o resultado é o seguinte:
+-----------+--------+------------+-------------------+----+-------+------+--------+ | codcomiss | codven | data | descricao | dc | valor | perc | comiss | +-----------+--------+------------+-------------------+----+-------+------+--------+ | 000002 | 00001 | 02/02/2004 | teste de vendas 2 | c | 10000 | 3 | 300 | | 000003 | 00001 | 10/02/2004 | teste de vendas 3 | d | 1000 | 3 | 30 | | 000004 | 00001 | 01/03/2004 | teste de vendas 4 | c | 15000 | 3 | 450 | | 000001 | 00001 | 01/02/2004 | teste de vendas 1 | c | 15000 | 3 | 450 | +-----------+--------+------------+-------------------+----+-------+------+--------+
Porém o resultado deveria ser o seguinte:
+-----------+--------+------------+-------------------+----+-------+------+--------+ | codcomiss | codven | data | descricao | dc | valor | perc | comiss | +-----------+--------+------------+-------------------+----+-------+------+--------+ | 000004 | 00001 | 01/03/2004 | teste de vendas 4 | c | 15000 | 3 | 450 | +-----------+--------+------------+-------------------+----+-------+------+--------+
Gostaria que alguém me auxilia-se dizendo como posso fazer a filtragem por data nesta situação???
Valeu galera, Abraços.
Paulo.
Paulomerino
Curtidas 0
Respostas
Paulo_amorim
20/02/2004
Olá
Estou apenas chutando, pois não sei se isso eh plausivel...
Mas o Banco nao poderia ser ´inteligente´ o suficiente pra interpretar a data?
qd voce digita 01/03/04, ele pode reconhecer como 3/1/2004 (forma americana)
entretanto, no caso de 31/03/04, ele nao pode fazer 3/31/2004, entao ele mantem....
Pode ser uma causa... :roll:
Até+
Estou apenas chutando, pois não sei se isso eh plausivel...
Mas o Banco nao poderia ser ´inteligente´ o suficiente pra interpretar a data?
qd voce digita 01/03/04, ele pode reconhecer como 3/1/2004 (forma americana)
entretanto, no caso de 31/03/04, ele nao pode fazer 3/31/2004, entao ele mantem....
Pode ser uma causa... :roll:
Até+
GOSTEI 0
Paulomerino
20/02/2004
Com certeza não é esse o problema, pois o banco está interpretando a data no nosso formato (dia/mes/ano) e não no americano.
Eu já esperimentei todas as situações de formato possíveis e imagináveis e nenhuma funcionou.
Estou começando a acreditar que seja algum bug no banco instalado na minha máquina.
Eu já esperimentei todas as situações de formato possíveis e imagináveis e nenhuma funcionou.
Estou começando a acreditar que seja algum bug no banco instalado na minha máquina.
GOSTEI 0
Adilsond
20/02/2004
Experimente passar as datas por parametros.
select * from com where codven = ´00001´ and data >= :DataIni and data <= :DataFin
ou
select * from com where codven = ´00001´ and data between :DataIni and :DataFin
MinhaQuery.ParamByName(´DataIni´).AsDate := StrToDate(´01/03/2004´);
MinhaQuery.ParamByName(´DataFin´).AsDate := StrToDate(´31/03/2004´);
select * from com where codven = ´00001´ and data >= :DataIni and data <= :DataFin
ou
select * from com where codven = ´00001´ and data between :DataIni and :DataFin
MinhaQuery.ParamByName(´DataIni´).AsDate := StrToDate(´01/03/2004´);
MinhaQuery.ParamByName(´DataFin´).AsDate := StrToDate(´31/03/2004´);
GOSTEI 0
Andrey
20/02/2004
Pode ser q ele esteja interpretando as datas como string ao invés de data mesmo. Experimente fazer:
select * from com where codven = ´00001´ and (data >= to_date(´01/03/2004´,´dd/mm/yyyy´) and data <= to_date(´31/03/2004´,´dd/mm/yyyy´))
ou
select * from com where codven = ´00001´ and data between to_date(´01/03/04´,´dd/mm/yyyy´) and to_date(´31/03/04´,´dd/mm/yyyy´)
select * from com where codven = ´00001´ and (data >= to_date(´01/03/2004´,´dd/mm/yyyy´) and data <= to_date(´31/03/2004´,´dd/mm/yyyy´))
ou
select * from com where codven = ´00001´ and data between to_date(´01/03/04´,´dd/mm/yyyy´) and to_date(´31/03/04´,´dd/mm/yyyy´)
GOSTEI 0