ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

ajuda sql data e hora

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Sex Fev 16, 2018 12:11 pm    Assunto: ajuda sql data e hora Responder com Citação

opa pessoal, estou com uma bronca aqui do tamanho de um trem kkkkk

seguinte, meu sistema tem um cadastro de promoções mais ou menos da seguinte forma:

eu digo o dia da semana e a data e hora do começo e do fim da promoção, por exemplo:

quinta-feira das 18:00 até as 22:00 vc compra uma coca-cola e ganha outra.
estou com uma bronca quando essa promoção muda de um dia para outro, tipo:

quinta-feira das 18:00 até as 23:59 e sexta-feira das 00:00 as 03:00.
dentro da tabela eu armazeno a data e hora que eu inclui o pedido, então eu preciso de uma sql q eu consiga mostrar todos os produtos q eu inclui dentro desse range de horários (q pode ser qualquer um)

no caso do exemplo acima seria da quinta-feira 18:00 até sexa-feira 03:00h,. lembrando q esse range é totalmente configurável.

tabela promoção
COD DIASEMANA HORAINI HORAFIM

ex:
1 - quinta-feira - 18:00 - 23:59
2 - sexta-feira - 00:00 - 03:00

tabela movimento
COD CODPROD QUANT DATAHORA

ex:
1 - 10 - 2 - 15/02/2018 23:50:12
2 - 10 - 1 - 16/02/2018 00:05:24

esses dois registros na tabela de movimento devem entrar na promoção.

agradeço a ajuda de todos...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Fev 16, 2018 1:38 pm    Assunto: Responder com Citação

Boa tarde,

Qual banco de dados (e versão) você está utilizando?
Qual é a estrutura da tabela de promoções? Ela tem apenas o dia da semana? Não tem os dias exatos de validade da promoção?
Considerando o seu exemplo, essa promoção é válida para todas as quintas-ferias existentes?

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Sex Fev 16, 2018 2:29 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Qual banco de dados (e versão) você está utilizando?
Qual é a estrutura da tabela de promoções? Ela tem apenas o dia da semana? Não tem os dias exatos de validade da promoção?
Considerando o seu exemplo, essa promoção é válida para todas as quintas-ferias existentes?

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos!cumbica-comercial_ou_industrial-galpão


MySQL versão é a 5.7.10
isso mesmo, não tem os dias exatos pq essa promoção funciona para todas as quintas-feiras e sextas-feiras, quando não quiser mais a promoção ele simplesmente desabilita a mesma.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Fev 16, 2018 2:58 pm    Assunto: Responder com Citação

Experimente fazer uns testes mais ou menos dessa forma para ver se é obtido o resultado esperado:

Código:
select m.* from Movimento as m
where
    exists(select 1 from Promocao as p
           where
               DayOfWeek(m.DataHora) =
                       case p.DiaSenama
                           when 'domingo' then 1
                           when 'segunda-feira' then 2
                           when 'terça-feira' then 3
                           when 'quarta-feira' then 4
                           when 'quinta-feira' then 5
                           when 'sexta-feira' then 6
                           else 7
                       end and
               Time(m.DataHora) between p.HoraIni and p.HoraFim)


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Sex Fev 16, 2018 5:13 pm    Assunto: Responder com Citação

amigo, como sempre vc me ajudando, PERFEITO...

estou sem palavras para mostrar minha gratidão, MUITO obrigado...

imex escreveu:
Experimente fazer uns testes mais ou menos dessa forma para ver se é obtido o resultado esperado:

Código:
select m.* from Movimento as m
where
    exists(select 1 from Promocao as p
           where
               DayOfWeek(m.DataHora) =
                       case p.DiaSenama
                           when 'domingo' then 1
                           when 'segunda-feira' then 2
                           when 'terça-feira' then 3
                           when 'quarta-feira' then 4
                           when 'quinta-feira' then 5
                           when 'sexta-feira' then 6
                           else 7
                       end and
               Time(m.DataHora) between p.HoraIni and p.HoraFim)


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB