Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

patriciatoscano

Problemas na busca entre datas exatas e intervalo de datas e horarios

Recommended Posts

Olá Galera,O meu grande problema é o seguinte, tenho uma instrução sql que faz uma busca com intervalo de datas e de horarios, ou seja entre 2 datas (10/11/2006 e 12/11/2006) e 2 horarios(07:15:00 e 23:00:00):SELECT * FROM passagem WHERE idcliente = '1' AND (idloja = '1') AND (identrada = '1') AND (datas BETWEEN #10/11/2006# AND #12/11/2006#) AND (horario BETWEEN #07:15:00# AND #23:00:00#) ORDER BY id ASCDesta forma acima esta funcionando corretamente.Mais quando eu tento buscar apenas em horarios diferentes(07:15:00 e 23:00:00), porem no mesmo dia(10/11/2006 e 10/11/2006) , ou seja desta forma abaixo:SELECT * FROM passagem WHERE idcliente = '1' AND (idloja = '1') AND (identrada = '1') AND (datas BETWEEN #10/11/2006# AND #10/11/2006#) AND (horario BETWEEN #07:15:00# AND #23:00:00#) ORDER BY id ASCA busca não acha dados algum no banco retorna que os dados não foram encontrados, sendo que existem registros sim com a data do dia 10/11/2006.Já tentei até um segunda alternativa, como no exemplo abaixo:SELECT * FROM passagem WHERE idcliente = '1' AND (idloja = '1') AND (identrada = '1') AND datas = #10/11/2006# AND (horario BETWEEN #07:15:00# AND #23:00:00#) ORDER BY id ASCPorém não funcionou também retorna que os dados não foram encontrados.Alguem poderia me ajudar a resolver, isso alguem teria uma solução, e poderia me mostrar um exemplo de como resolver isso, o banco que estou usando a principio é access, porem devo migrar depois para o sql server.Aguardo uma ajuda urgente, postem também o código de exemplo de vocês de como eu devo solucionar isso, pois desta forma fica mais, claro de entender.Um Abraço a todos desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Galera,O meu grande problema é o seguinte, tenho uma instrução sql que faz uma busca com intervalo de datas e de horarios, ou seja entre 2 datas (10/11/2006 e 12/11/2006) e 2 horarios(07:15:00 e 23:00:00):SELECT * FROM passagem WHERE idcliente = '1' AND (idloja = '1') AND (identrada = '1') AND (datas BETWEEN #10/11/2006# AND #12/11/2006#) AND (horario BETWEEN #07:15:00# AND #23:00:00#) ORDER BY id ASCDesta forma acima esta funcionando corretamente.Mais quando eu tento buscar apenas em horarios diferentes(07:15:00 e 23:00:00), porem no mesmo dia(10/11/2006 e 10/11/2006) , ou seja desta forma abaixo:SELECT * FROM passagem WHERE idcliente = '1' AND (idloja = '1') AND (identrada = '1') AND (datas BETWEEN #10/11/2006# AND #10/11/2006#) AND (horario BETWEEN #07:15:00# AND #23:00:00#) ORDER BY id ASCA busca não acha dados algum no banco retorna que os dados não foram encontrados, sendo que existem registros sim com a data do dia 10/11/2006.Já tentei até um segunda alternativa, como no exemplo abaixo:SELECT * FROM passagem WHERE idcliente = '1' AND (idloja = '1') AND (identrada = '1') AND datas = #10/11/2006# AND (horario BETWEEN #07:15:00# AND #23:00:00#) ORDER BY id ASCPorém não funcionou também retorna que os dados não foram encontrados.Alguem poderia me ajudar a resolver, isso alguem teria uma solução, e poderia me mostrar um exemplo de como resolver isso, o banco que estou usando a principio é access, porem devo migrar depois para o sql server.Aguardo uma ajuda urgente, postem também o código de exemplo de vocês de como eu devo solucionar isso, pois desta forma fica mais, claro de entender.Um Abraço a todos desde já.

Qual banco de dados você esta utilizando? Access?Qual o tipo de dados dos camps data e horario?Pra facilitar a analise.t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só você prestar a atenção nos campos data e horario estão com os valores em formato #10/11/2006# pois o campo é do tipo data/hora, tem que ser colocado entre #...# quando o campo é do tipo data e hora.O banco que estou usando a principio é access como informado anteriormente no final do meu primeiro post.Aguardo uma ajuda, exmplo de código e etc...Um Abraço e agradeço desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só você prestar a atenção nos campos data e horario estão com os valores em formato #10/11/2006# pois o campo é do tipo data/hora, tem que ser colocado entre #...# quando o campo é do tipo data e hora.O banco que estou usando a principio é access como informado anteriormente no final do meu primeiro post.Aguardo uma ajuda, exmplo de código e etc...Um Abraço e agradeço desde já

patriciatoscano,Antes de mais nada desculpe-me por não ter prestado atenção que no final do seu post esta descrito q bd você esta utilizando. Respondo mtos tópicos e normalmente estou trabalhando e respondendo dai acontece desta coisas.Criei um tabela no access com os campos data e horario. Fiz um teste utilizando o BETWEEN e para meu espanto realmente com a data igual não retornou nada. Não ei o pq pois access não é minha especialidade. Fiz o seguinte teste e funcionou sem problemas:
SELECT Tabela2.data, Tabela2.horario, *FROM Tabela2WHERE (((Tabela2.data)>=#11/10/2006# And (Tabela2.data)<=#11/10/2006#) AND ((Tabela2.horario) Between #12/30/1899 7:15:0# And #12/30/1899 23:0:0#));
Lembre-se é só um exemplo de como contornar o problema. Vai funcionar e você não vai ficar parada mas se alguém se habilitar podeira explicar pq usando o BETWEEN testando a msm data dá pau.Outra observação se você esta msm pensando em migrar para o SQL Server futuramente aconselho desde já desenvolver para ele. O Sql utilizado no Access não é padrão Ansi (padrã da liguagem SQL aceito por todos os bancos de dados relacionais do mercado) é bem pecuiliar e depois mta coisa deverá ser re-escrita o que vai gerar re-trabalho. Claro existem váriar ferramentas para migração dos dados mas suas querys dependendo do que você esta utilizando deveram ser re-escritas. Por exemplo o SQL Server não reconche consulta de referência cruzada não tem a funçaõ PIVOT. O Sql Server não reconhece o IIF do access e simo CASE.Com já pnei mto com este tipo de coisa aconselho a já desenvolver para o SQL Server ou outro (mysql, sybase, postgree.).t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok jothaz muito obrigado pela a sua ajuda mais consegui resolver o access é muito louco, fiz o seguinte mudei o formato das datas na variavel, ou seja na query sql coloquei mm/dd/aaaa ao inves do formato brasileiro o anterior dd/mm/aaaa. Ai ele achou mesmo no banco esta ainda no formtaro brasileiro dd/mm/aaaa, Conclusão busco assim: mm/dd/aaaa e ele acha o que esta assim no banco dd/mm/aaaa.Não sei muito bem mais acho que é porque descobri que o padrão da linguagem SQL para se trabalhar com data é no formato: mm/dd/aaaa, ai não sei o que ele faz para achar os dados ou o banco converte, ou a propria linguagem converte não sei.Um Abraço a todo s muito obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok jothaz muito obrigado pela a sua ajuda mais consegui resolver o access é muito louco, fiz o seguinte mudei o formato das datas na variavel, ou seja na query sql coloquei mm/dd/aaaa ao inves do formato brasileiro o anterior dd/mm/aaaa. Ai ele achou mesmo no banco esta ainda no formtaro brasileiro dd/mm/aaaa, Conclusão busco assim: mm/dd/aaaa e ele acha o que esta assim no banco dd/mm/aaaa.Não sei muito bem mais acho que é porque descobri que o padrão da linguagem SQL para se trabalhar com data é no formato: mm/dd/aaaa, ai não sei o que ele faz para achar os dados ou o banco converte, ou a propria linguagem converte não sei.Um Abraço a todo s muito obrigado pela ajuda.

Na verdade o padrão que é aceito por todo bd profissionais seria AAAA/MM/DD acho que chama-se data formata juliano. Até nos bancos de dados do mainframe funciona.Q bom eu consertou o erro. Mas é dose ter de colocar a data no formato americano para funcionar.Só mais um quetionamento como esta configurado no painel de contrle --> Opções regionais? Lá você pode definir o formato dd/mm/aaaa como padrão. No meu caso esta no formato americano por isso o access não funcionou mas como não tenho permissão de alterar nada na minha máquina não pude alterar e testar. Caso lhe interesse faça o teste.E qto a desenvolver direto para SQL para evitar o re-trablaho abominou a idéia.t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.