none
SELECT dentro de um intervalo de datas RRS feed

  • Pergunta

  • Ola experts,

    Preciso da ajuda de voces, se possivel, estou com dificuldade de selecionar dados dentro de um intervalo de datas.

    O campo onde tem datas está definido como datetime

    SELECT CLIENTID AS CLIENTE,
    LOANID AS CREDITO,
    ACTDISBDT AS DESEMBOLSO
    FROM TBLLOAN
    WHERE ACTDISBDT <> 0
    AND
    ACTDISBDT BETWEEN '2011-02-01 00:00:00.0000' and '2011-02-28 00:00:00.0000'

    Quando executo gera erro:

    Msg 241, Level 16, State 1, Line 1
    Erro de conversão ao converter datetime da seqüência de caracteres.

     

    Obrigado.


    Anderson Muniz | Analista de T.I | ITIL Foundation V2 Certified | Auditor Interno ISO 9001:2005
    quinta-feira, 31 de março de 2011 07:21

Respostas

  • Bom Dia,

    O tipo de dados DATETIME tem precisão até 1/300 de segundo. Assim sendo, colocar quatro zeros após o segundo provoca o estouro. Você pode manter da seguinte forma (ou retirar os zeros se preferir).

    ACTDISBDT BETWEEN '2011-02-01 00:00:00.000' and '2011-02-28 00:00:00.000'
    

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar quinta-feira, 31 de março de 2011 12:10
    • Marcado como Resposta Eder Costa sexta-feira, 8 de abril de 2011 18:10
    quinta-feira, 31 de março de 2011 12:10
  • Anderson,

    Isso está acontecendo porque provavelmente a propriedade DateFormat está definida para receber Ano/Dia/Mês. Como não existe o mês 28, ele gera este erro.

    Para resolver este problema você pode acrescentar o seguinte trecho antes do seu select

    -- Muda o formato da data para Ano/Mes/Dia
    Set dateformat ymd
    

    Ou Então: 

     Alterar data que você está utilizando no filtro para o formato Ano/Dia/Mês

    WHERE DISBDT BETWEEN '2011-01-02 00:00:00' and '2011-28-02 00:00:00'


    Espero que ajude! Luiz Phellipe
    • Sugerido como Resposta Eder Costa quarta-feira, 6 de abril de 2011 18:17
    • Marcado como Resposta Eder Costa sexta-feira, 8 de abril de 2011 18:10
    sábado, 2 de abril de 2011 00:44

Todas as Respostas

  • Amigo, tire esses .0000 do final que irá da certo:

    between '2011-02-01 00:00:00' and '2011-02-28 00:00:00'
    


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    quinta-feira, 31 de março de 2011 11:47
  • Bom Dia,

    O tipo de dados DATETIME tem precisão até 1/300 de segundo. Assim sendo, colocar quatro zeros após o segundo provoca o estouro. Você pode manter da seguinte forma (ou retirar os zeros se preferir).

    ACTDISBDT BETWEEN '2011-02-01 00:00:00.000' and '2011-02-28 00:00:00.000'
    

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar quinta-feira, 31 de março de 2011 12:10
    • Marcado como Resposta Eder Costa sexta-feira, 8 de abril de 2011 18:10
    quinta-feira, 31 de março de 2011 12:10
  • Ola,

    Ocorreu erro:

     

    SELECT CLIENTID AS CLIENTE,
    LOANID AS CREDITO,
    ACTDISBDT AS DESEMBOLSO
    FROM TBLLOAN
    WHERE
    ACTDISBDT BETWEEN '2011-02-01 00:00:00' and '2011-02-28 00:00:00'

     

    Mensagem:

    Msg 242, Level 16, State 3, Line 1
    A conversão de um tipo de dados char em um tipo de dados datetime resultou em um valor datetime fora do intervalo.

    Valeu.

     


    Anderson Muniz | Analista de T.I | ITIL Foundation V2 Certified | Auditor Interno ISO 9001:2005
    quinta-feira, 31 de março de 2011 13:46
  • Anderson,

    Isso está acontecendo porque provavelmente a propriedade DateFormat está definida para receber Ano/Dia/Mês. Como não existe o mês 28, ele gera este erro.

    Para resolver este problema você pode acrescentar o seguinte trecho antes do seu select

    -- Muda o formato da data para Ano/Mes/Dia
    Set dateformat ymd
    

    Ou Então: 

     Alterar data que você está utilizando no filtro para o formato Ano/Dia/Mês

    WHERE DISBDT BETWEEN '2011-01-02 00:00:00' and '2011-28-02 00:00:00'


    Espero que ajude! Luiz Phellipe
    • Sugerido como Resposta Eder Costa quarta-feira, 6 de abril de 2011 18:17
    • Marcado como Resposta Eder Costa sexta-feira, 8 de abril de 2011 18:10
    sábado, 2 de abril de 2011 00:44
  • Se erro ainda continuar

    informe o datatype da coluna ACTDISBDT

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    segunda-feira, 4 de abril de 2011 10:57
    Moderador