[firebase-br] sql entre datas e horas

Claudinei Catarino claudineicatarino em bol.com.br
Sáb Dez 29 10:46:08 -03 2012


Pessoal, bom dia!

Eu tive um problema semelhante e solucionei da seguinte maneira: criei um 
campo "status" para que eu soubesse quando ocorreu a abertura e o fechamento 
do período.

Maurício, pelo que pude perceber na tua explicação, em um intervalo de tempo 
podemos ter uma abertura, um fechamento e novamente uma abertura de 
expediente. Apesar de você falar que o início é às 18:00 e o encerramento às 
02:30, o exemplo que você colocou demonstra uma "QUEBRA DE REGRA DE NEGÓCIO" 
pois seu sistema registrou uma data-hora fora do especificado no requisito 
(momento da abertura e momento de encerramento de expediente).

Eu concordo com o pessoal. Não sei se é possível você mexer na estrutura dos 
dados e no sistema. Quando eu tive um problema desta natureza resolvi 
criando um campo "status" e nele eu informava quando era o início e quando 
era o fim do expediente.

Parece loucura o que vou dizer: nestes casos tente colocar-se no lugar da 
máquina. Imagine-se recebendo os dados e os colocando em cada lugar do 
registro. Parece loucura, mas é esta a postura/técnica que adoto quando me 
surge este tipo de problema.

É isto aí. Espero ter ajudado.

Pessoal, de todo meu coração, um Feliz Ano Novo para todos. Desculpem e 
perdoem-me as faltas. Agradeço-lhes pelos momentos que tivemos juntos neste 
ano e podemos trocar conhecimentos. Agradeço a todos que fazem deste canal 
um veículo de paz para nós.

"Porque, a quem muito se deu, muito se exigirá. Quanto mais se confiar a 
alguém, dele mais se há de exigir. (Lucas, 12, 39-48)"

Que Deus abençõe nossas famílias para que tenhamos força e coragem para 
enfrentarmos as mazelas da vida!

Pessoal, fiquem com Deus, boas festas e até 2013!!!!

Claudinei Catarino


Message: 3
Date: Thu, 27 Dec 2012 21:13:02 -0300
From: MAURICIO COSTA <maximmumsistemas em gmail.com>
To: FireBase <lista em firebase.com.br>
Subject: Re: [firebase-br] sql entre datas e horas
Message-ID:
<CAPLOrMxjsfR3UmuX=OcTKD1UBTvE1ySb2SX_g0XJgrdCqOQuVg em mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

Obrigado Renato já por me disponibilizar ajuda. Mas, acho que não expliquei
direito. Vou tentar ser mais didático em minha pergunta:
Tenho uma tabela chamada CUPOM, nesta temos os campos ID_CUPOM,DATA_CUPOM,
HORA_CUPOM, VALOR_CUPOM. Colocando dados de exemplos na mesma ficaria assim:
ID_CUPOM DATA_CUPOM HORA_CUPOM VALOR_CUPOM
1                01/12/2012       23:25:53            100,00
2                01/12/2012       23:52:58            120,00
3                01/12/2012       00:59:59            300,00
4                02/12/2012       01:12:25            180,00
5                02/12/2012       02:14:58            140,00
Como e restaurante as vendas inicia as 18:00 e conclui as 02:30 da manhã no
outro dia, no exemplo acima iniciou no dia 01/12/2012 de 23:25:53 e
concluiu em 02/12/2012 as 02:14:58. Nesta data 02/12/2012 o estabelecimento
abrirá as 18:00 e as vendas da madrugada que foram duas vendas as de 180,00
e 140,00 vai entrar no relatório do dia 02/12/2012 por isso preciso de uma
maneira que a hora possa separar as vendas de uma dia para o outro. Exemplo
Where DATA_CUPOM >= 01/12/2012 And DATA_CUPOM <= 02/12/2012, só que eu
queria os produtos onde HORA_CUPOM >= 18:00:00 e  HORA_CUPOM <= 03:00:00.
Acho que ficou melhor.


Em 27 de dezembro de 2012 20:41, renato wulf jr
<renatus em centris.com.br>escreveu:

> O ideal seria ao invés de ter um campo tipo date e outro time que fosse um
> do tipo timestamp (contempla data e hora junto).
> Nesse caso a pesquisa ficaria mais fácil.
>
> Um exemplo:
>
> select * from tabela where data between '2012-12-1 00:00:00' and 
> '2012-12-1
> 12:00:00'
>
>
> Se não der pra mudar a modelagem dos seus dados outra saída seria
> concatenar os campos data e hora e a partir daí fazer a pesquisa. Seria
> algo assim:
>
> select cast(data || ' ' || hora as timestamp) datahora from tabela where
> cast(data || ' ' || hora as timestamp) between '2012-12-1 00:00:00' and
> '2012-12-1 12:00:00'
>
> Obs.: O comando sql acima não testei em nenhuma base e pode ser que
> contenha erro de sintaxe, mas a ideia seria essa.
>
>
>
> Renato
>
>
>
> 





Mais detalhes sobre a lista de discussão lista