none
Registro num intervalo de dias e horas RRS feed

  • Pergunta

  • Prezados, se possível gostaria de uma ajuda com o seguinte caso:

    Preciso dos registros de atendimentos de um intervalo de dias e horas. Porém no meu BD o tenho uma coluna para data e outra para hora. 

    Quando uso o este script, os campos de hora entram em divergência, como resolver?

    Obrigado pela ajuda de sempre!

    SELECT
    SZATENDIMENTO.DATAENTRADA,
    SZATENDIMENTO.CODPACIENTE AS 'PACIENTE_PRONTUARIO',
    SZATENDIMENTO.CODATENDIMENTO AS 'PACIENETE_ATENDIMENTO',
    SZPACIENTE.NOMEPACIENTE AS 'PACIENTE_NOME',
    SZATENDIMENTO.RESPGRAVACAOCONTA AS 'ATENDENTE',
    FROM SZATENDIMENTO (NOLOCK)
    INNER JOIN SZPACIENTE ON
    SZATENDIMENTO.CODPACIENTE = SZPACIENTE.CODPACIENTE
    WHERE SZATENDIMENTO.TIPOPACIENTE = 'E'
    AND SZATENDIMENTO.DATAENTRADA>='2020-10-13'
    AND SZATENDIMENTO.DATAENTRADA<='2020-10-14'
    AND SZATENDIMENTO.HORAENTRADA>=1900
    AND SZATENDIMENTO.HORAENTRADA<=0100
    AND SZATENDIMENTO.CODPRESTADOR = 4
    AND SZATENDIMENTO.CODCOMPRADOR = 17
    AND SZATENDIMENTO.IDUNIDATEND IN (24,3)

    quarta-feira, 14 de outubro de 2020 16:33

Todas as Respostas

  • Thiago,

    Se você estiver utilizando o SQL Server 2012 ou Superior, talvez o uso da função Concat(), realizando a concatenação da Data e Hora, na cláusula Where poderá lhe ajudar, lógicamente temos que analisar o possível impacto no processamento que esta implementação pode provocar.

    Veja o exemplo de código que eu elaborei de forma adaptada a sua necessidade:

    -- Criando a Tabela de Atendimento --
    Create Table Atendimento
    (Codigo Int Identity(1,1) Primary Key,
     Nome Varchar(20),
     DataEntrada Date,
     HoraEntrada Time,
     DataSaida Date,
     HoraSaida Time)
    Go
    
    -- Inserindo os dados --
    Insert Into Atendimento (Nome, DataEntrada, HoraEntrada, DataSaida, HoraSaida)
     Values ('A',GetDate(), GetDate(), GetDate()+2, DATEADD(HOUR,2,GetDate())),
                   ('B',GetDate()+1, GetDate(), GetDate()+4, DATEADD(HOUR,4,GetDate())),
    			   ('C',GetDate()+2, GetDate(), GetDate()+6, DATEADD(HOUR,6,GetDate())),
    			   ('D',GetDate()+3, GetDate(), GetDate()+8, DATEADD(HOUR,8,GetDate())),
    			   ('D',GetDate()+4, GetDate(), GetDate()+10, DATEADD(HOUR,10,GetDate()))
    Go
    
    -- Retornando o Select com o filtro da concatenação em relação a Data e Hora aplicada a cláusula Where --
    Select Codigo, Nome, 
                CONCAT(DataEntrada,' ',HoraEntrada) As DataEntrada,
                CONCAT(DataSaida,' ',HoraSaida) As DataSaida
    From Atendimento
    Where DataEntrada BetWeen '2020-10-16 14:02:36.1000000' And '2020-10-17 14:04:21.7600000'
    Go

    Uma outra abordagem seria transforma o seu código em uma CTE e depois fazer o filtro, veja abaixo:

    ;With CTEAtendimento (Codigo, Nome, DataEntrada, DataSaida)
    As
    (
    Select Codigo, Nome, 
                CONCAT(DataEntrada,' ',HoraEntrada) As DataEntrada,
                CONCAT(DataSaida,' ',HoraSaida) As DataSaida
    From Atendimento)
    Select * From CTEAtendimento
    Where DataEntrada >= '2020-10-15 14:04:21.7600000' And DataSaida <='2020-10-22 22:04:21.7600000'
    Go

    Peço que realize uma análise, validando e identificando as possíveis adaptações ao seu código.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 14 de outubro de 2020 17:10
  • Boa tarde,

    Thiago, considerando que a coluna HoraEntrada seja do tipo inteiro, experimente substituir o trecho abaixo:

    AND SZATENDIMENTO.DATAENTRADA>='2020-10-13'
    AND SZATENDIMENTO.DATAENTRADA<='2020-10-14'
    AND SZATENDIMENTO.HORAENTRADA>=1900
    AND SZATENDIMENTO.HORAENTRADA<=0100
    

    por

    AND dateadd
            (minute, 
             SZATENDIMENTO.HORAENTRADA % 100, 
             dateadd
                 (hour, 
                  SZATENDIMENTO.HORAENTRADA / 100, 
                  SZATENDIMENTO.DATAENTRADA)) 
            between '2020-10-13 19:00' and '2020-10-14 01:00'

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 14 de outubro de 2020 17:17