none
Select Getdate() RRS feed

  • Pergunta

  • Boa noite pessoal ! 

    Tenho um Relatorio que mostro tudo que acontece no dia anterior independete do horario de hoje teria que mostrar tudo de ontem... ou seja tenho um campo data e faco da seguinte forma

    Select * from TABELA where DATA > GETDATE() -1

    O poblemas é que como o getdate pega o horario do servidor entao se agora sao 15:00 com o comando acima pegara somente as data depois de 15:00 de ontem mas eu queria algo que me mostrasse tudo do dia anterior independento do horario 

    Alguem tem alguma ideia ??

    sexta-feira, 13 de julho de 2012 23:12

Respostas

  • O primeiro horário do dia seria 00:00:00, tente fazer desta maneira:

    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/


    • Editado Vitor Mendes sábado, 14 de julho de 2012 00:11
    • Marcado como Resposta RJ_Silva sábado, 14 de julho de 2012 20:38
    sábado, 14 de julho de 2012 00:10
  • Perfeito Vitor exatamente o que eu precisava !

    Valew

    mad poderia me explicar o que esse -1,101 representa ?? srsr 

    O GETDATE() -1 é igual data de hoje menos um dia ou seja, hoje é dia 13/07/2012, com menos um o comando retornaria 12/07/2012 22:28:00

    Como você precisa do primeiro horário do dia anterior, logo a hora atual não serve, o correto seria 12/07/2012 00:00:00

    Ai que entra o comando CONVERT(VARCHAR,GETDATE() -1,101), convertendo a data para 07/12/2012, sem as horas.

    Quando o CAST para um tipo DATETIME é feito e não informamos as horas, ele deixa a default que é 00:00:00, logo se executarmos o comando acima teremos o seguinte resultado:

    2012-07-12 00:00:00.000

    Suprindo a sua necessidade da data do dia anterior com o primeiro horário do dia =D


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Sugerido como Resposta Roberson Naves sábado, 14 de julho de 2012 15:01
    • Marcado como Resposta RJ_Silva sábado, 14 de julho de 2012 20:38
    sábado, 14 de julho de 2012 01:32
  • Isso acontece porque o servidor utiliza um date format diferente da sua instancia do SQL local.

    Você pode simular este erro no servidor rodando este comando:

    SET DATEFORMAT DMY
    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)

    Tente utilizar o mesmo date format que o servidor usa, certamente é YMD:

    SET DATEFORMAT YMD
    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)

    Agora o motivo que este erro acontece não sei te explicar, esta ligado ha alguma coisa com o CAST() para datetime.


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta RJ_Silva segunda-feira, 16 de julho de 2012 22:03
    segunda-feira, 16 de julho de 2012 12:13

Todas as Respostas

  • O primeiro horário do dia seria 00:00:00, tente fazer desta maneira:

    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/


    • Editado Vitor Mendes sábado, 14 de julho de 2012 00:11
    • Marcado como Resposta RJ_Silva sábado, 14 de julho de 2012 20:38
    sábado, 14 de julho de 2012 00:10
  • Perfeito Vitor exatamente o que eu precisava !

    Valew

    mad poderia me explicar o que esse -1,101 representa ?? srsr 
    • Editado RJ_Silva sábado, 14 de julho de 2012 00:52
    sábado, 14 de julho de 2012 00:51
  • Perfeito Vitor exatamente o que eu precisava !

    Valew

    mad poderia me explicar o que esse -1,101 representa ?? srsr 

    O GETDATE() -1 é igual data de hoje menos um dia ou seja, hoje é dia 13/07/2012, com menos um o comando retornaria 12/07/2012 22:28:00

    Como você precisa do primeiro horário do dia anterior, logo a hora atual não serve, o correto seria 12/07/2012 00:00:00

    Ai que entra o comando CONVERT(VARCHAR,GETDATE() -1,101), convertendo a data para 07/12/2012, sem as horas.

    Quando o CAST para um tipo DATETIME é feito e não informamos as horas, ele deixa a default que é 00:00:00, logo se executarmos o comando acima teremos o seguinte resultado:

    2012-07-12 00:00:00.000

    Suprindo a sua necessidade da data do dia anterior com o primeiro horário do dia =D


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Sugerido como Resposta Roberson Naves sábado, 14 de julho de 2012 15:01
    • Marcado como Resposta RJ_Silva sábado, 14 de julho de 2012 20:38
    sábado, 14 de julho de 2012 01:32
  • Vitor desculpe voltar nesse topico mas o comando acima funcionou no servidor onde esta meu banco mas na minha maquina local nao funcionou tem ideia do que pode ser ? 

    quando faco direto no servidor conectando atraves do SQL management studio da certo

    Aparece o seguinte erro quando faco na minha maquina

    domingo, 15 de julho de 2012 19:57
  • Isso acontece porque o servidor utiliza um date format diferente da sua instancia do SQL local.

    Você pode simular este erro no servidor rodando este comando:

    SET DATEFORMAT DMY
    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)

    Tente utilizar o mesmo date format que o servidor usa, certamente é YMD:

    SET DATEFORMAT YMD
    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)

    Agora o motivo que este erro acontece não sei te explicar, esta ligado ha alguma coisa com o CAST() para datetime.


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta RJ_Silva segunda-feira, 16 de julho de 2012 22:03
    segunda-feira, 16 de julho de 2012 12:13
  • Isso acontece porque o servidor utiliza um date format diferente da sua instancia do SQL local.

    Você pode simular este erro no servidor rodando este comando:

    SET DATEFORMAT DMY
    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)

    Tente utilizar o mesmo date format que o servidor usa, certamente é YMD:

    SET DATEFORMAT YMD
    SELECT CAST(CONVERT(VARCHAR,GETDATE() -1,101) AS DATETIME)

    Agora o motivo que este erro acontece não sei te explicar, esta ligado ha alguma coisa com o CAST() para datetime.


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    Valeu Vitor funcionou ,

    Mas tbm pesquisando na net ao inves de usar 

    GETDATE() -1,101

    era so colocar

    GETDATE() -1,103

    tbm funciona

    Valeu pela Atencao

    segunda-feira, 16 de julho de 2012 22:03