none
Calculo com data e hora sql server

    Question

  • Olá pessoal tenho um data no bd armazenada assim:
    2009-03-12 14:03:57.030 como faço para saber quantos MINUTOS já
    se passaram da data e hora atual

    tipo data_hora_atual - 2009-03-12 14:03:57.030 = 25 minutos
    23 minutos
    159 minutos

    1.541 minutos

    etc.


    Obrigado desde já!

    att.
    Friday, March 13, 2009 11:02 PM

Answers

  • Olá,

    Você pode fazer da seguinte forma:


     
     
    Select   
        DateDiff(n,'20080101 00:00:01.000''20080101 01:33:25.000')/60 As Horas,   
        DateDiff(n,'20080101 00:00:01.000''20080101 01:33:25.000')%60 As Minutos,  
        DateDiff(s,'20080101 00:00:01.000''20080101 01:33:25.000')%60 As Segundos  
     
     
     
     


    Só uma observação, realizar selects o tempo todo no banco para fazer essa verificação pode degradar o servidor de banco de dados, rede, etc;

    Abraços

    Demétrio Silva
    Monday, March 16, 2009 8:13 PM
  • so para constar segue outro exemplo


    Declare @horaInicio datetime, @horaFim datetime

    Select @Horainicio = '2009-01-01 15:23', @horaFim = '2009-01-01 20:10'

    Select Convert(char(05),DateAdd(minute,DateDiff(n,@Horainicio, @horaFim),'1900-01-01'),14)

    Abs/


    mcolla@bol.com.br
    Tuesday, March 17, 2009 10:35 AM
    Moderator

All replies

  •  Galera, consegui fazer utilizando o DATEDIFF(MI...
    meu problema agora eh outro no select,

    tenho uma tabela onde guarda os registros de pedidos do usuário,
    esta tabela guarda codigo do usuário, sessionid, data_hora pedido,
    tenho a seguinte situação

    sessionID                COD. Usuario                    datahora
    ----------------------------------------------------------------------------
    00000000                10                                    12/03/2009 10:00:00
    00000000                10                                    12/03/2009 10:15:12
    00000000                10                                    12/03/2009 10:18:17
    11111111                10                                    13/03/2009 18:25:32
    11111111                10                                    13/03/2009 18:28:38
    22222222                12                                    13/03/2009 15:02:00
    33333333                12                                    13/03/2009 18:20:26


    o que eu preciso fazer é um select que me traga uma unica sessionid, o código do
    usuário desta sessionid, e a diferença em minutos da MENOR DATA_HORA da (sessionid vs CODUSER)

    ex do retorno desejavel:

    sessionID                COD. Usuario                    datahora (minutos)
    ----------------------------------------------------------------------------
    00000000                10                                    952
    11111111                10                                    765
    22222222                12                                    253
    33333333                12                                    120



    Consegui fazer o select assim

    select DATEDIFF(MI, MIN(DATAHORAINICIO), GETDATE()) AS DATAHORA,
    sessionid, CODUSER from carrinho
    GROUP BY SESSIONID, CODUSER


    só que preciso agora trazer somente os registros onde os minutos forem >= 25
    como eu faço a clausula WHERE para verificar isso?

    Obrigado desde já!

    • Edited by DarkDucke Saturday, March 14, 2009 2:07 PM achei solução proxima
    Saturday, March 14, 2009 1:59 PM
  • Olá,

    Não sei se entendi bem mas não seria isso:


     
     
    select   
    DATEDIFF(MI, MIN(DATAHORAINICIO), GETDATE()) AS DATAHORA,  
    sessionid, CODUSER from carrinho  
    where DATEDIFF(MI, MIN(DATAHORAINICIO), GETDATE()) >= 25  
    GROUP BY SESSIONID, CODUSER  
     
     
     

    Abraços
    Demétrio Silva
    Monday, March 16, 2009 6:09 PM
  • Da erro nesse select, o que
    preciso e saber quantos minutos e segundos ja se passaram desde a data e hora do BD.

    erro do select informado:

    Msg 147, Level 15, State 1, Line 1

    An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.

    Monday, March 16, 2009 7:29 PM
  • Opa,

    Foi mal, é que to meio desligado esses dias, nem notei o uso do min.

     
     
    select      
    DATEDIFF(MI, MIN(DATAHORAINICIO), GETDATE()) AS DATAHORA,     
    sessionid, CODUSER from carrinho     
    GROUP BY SESSIONID, CODUSER     
    having DATEDIFF(MI, MIN(DATAHORAINICIO), GETDATE()) >= 25     
     
     
     


    Abraços

    Demétrio Silva
    Monday, March 16, 2009 7:34 PM
  • Demétrio, é isso ai, só preciso de mais um ajuste no select,
    como to fazendo um timer pro usuário acompanhar este tempo,
    eu preciso pegar os minutos e segundos pra juntar em um label e mostrar pro usuário assim:

    15:53 (quinze minutos e 53 segundos)

    no resultado do select tb ter os segundos, neste caso teria se passado 15:53 minutos
    mais mostrar isso tirando 20 minutos que é o tempo limite
    20 minutos - 15:53 minutos o que restaria para o usuário 04:07 minutos

    gostaria que o select trouxesse este resultado de 04:07 minutos,
    ou seja, 20 minutos menos o tempo que já se passou da data_hora do bd!


    Obrigado novamente!
    Monday, March 16, 2009 7:50 PM
  • Olá,

    Você pode fazer da seguinte forma:


     
     
    Select   
        DateDiff(n,'20080101 00:00:01.000''20080101 01:33:25.000')/60 As Horas,   
        DateDiff(n,'20080101 00:00:01.000''20080101 01:33:25.000')%60 As Minutos,  
        DateDiff(s,'20080101 00:00:01.000''20080101 01:33:25.000')%60 As Segundos  
     
     
     
     


    Só uma observação, realizar selects o tempo todo no banco para fazer essa verificação pode degradar o servidor de banco de dados, rede, etc;

    Abraços

    Demétrio Silva
    Monday, March 16, 2009 8:13 PM
  • so para constar segue outro exemplo


    Declare @horaInicio datetime, @horaFim datetime

    Select @Horainicio = '2009-01-01 15:23', @horaFim = '2009-01-01 20:10'

    Select Convert(char(05),DateAdd(minute,DateDiff(n,@Horainicio, @horaFim),'1900-01-01'),14)

    Abs/


    mcolla@bol.com.br
    Tuesday, March 17, 2009 10:35 AM
    Moderator