none
Erro de Conversao de Data RRS feed

  • Pergunta

  • Bom dia a todos, vejam que erro esta acontecendo na minha SQL,

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value,
    ja tentei colocar Datetime,tentei converter e ainda nao consegui resolver, agradeço a ajuda de todos..

    Sentença..

    SELECT
     FXCX.VALOR,
     '1',
     CONVERT (VARCHAR,FXCX.DATA,103)AS dt$,
     CONVERT (VARCHAR, FXCX.DATACOMPENSACAO,103) AS 'DT',
     FXCX.NUMERODOCUMENTO,
     FXCX.IDXCX,
    CASE WHEN FXCX.NOMINAL IS NOT NULL
          THEN FXCX.NOMINAL
           WHEN FXCX.TIPO = '7'
          THEN (SELECT DISTINCT FCXA.DESCRICAO
                FROM FCXA
                WHERE  FXCX.CODCOLCXA = FCXA.CODCOLIGADA
                AND FXCX.CODCXA = FCXA.CODCXA)
    WHEN (SELECT FXCXCOMPL.NOME
                          FROM FXCXCOMPL
                          WHERE FXCXCOMPL.CODCOLIGADA = FXCX.CODCOLIGADA
                            AND FXCXCOMPL.IDXCX = FXCX.IDXCX) IS NOT NULL
            THEN (SELECT DISTINCT FXCXCOMPL.NOME
                          FROM FXCXCOMPL
                          WHERE FXCXCOMPL.CODCOLIGADA = FXCX.CODCOLIGADA
                            AND FXCXCOMPL.IDXCX = FXCX.IDXCX
                          ) 
          ELSE (SELECT DISTINCT FCFO.NOME
                 FROM FCFO (NOLOCK)
                      INNER JOIN FXCX AS FX (NOLOCK)
                            ON FX.IDXCX = FXCX.IDXCX
                      INNER JOIN FLAN (NOLOCK)
                            ON FLAN.CODCFO = FCFO.CODCFO
                            AND FLAN.IDXCX = FX.IDXCX)
    END,
     FXCX.TIPO,    
    CONVERT (datetime, FXCX.DATAESTORNO,103)
    FROM FXCX
    WHERE FXCX.DATA <= '2010-01-18'
      AND  FXCX.DATA >= '2010-01-18'
       AND  FXCX.COMPENSADO <> 2
        AND ( FXCX.CODCOLIGADA = 1 )
         and  FXCX.CODCXA = '000380-7'
          and FXCX.VALOR < 0
            AND FXCX.DATACANCELAMENTO IS NULL
              AND FXCX.TIPO NOT IN ('8','9') 
                     AND FXCX.DATAESTORNO IS NULL  
    UNION ALL
    SELECT
     FXCX.VALOR,
     '0',
     CONVERT (VARCHAR,FXCX.DATA,103),
     CONVERT(VARCHAR,FXCX.DATACOMPENSACAO,103),
     FXCX.NUMERODOCUMENTO,
     FXCX.IDXCX,
    CASE WHEN FXCX.NOMINAL IS NOT NULL
          THEN FXCX.NOMINAL
             WHEN FXCX.TIPO = '1'
          THEN (SELECT DISTINCT FCXA.DESCRICAO
                FROM FCXA
                WHERE  FXCX.CODCOLCXA = FCXA.CODCOLIGADA
                AND FXCX.CODCXA = FCXA.CODCXA)
    WHEN (SELECT FXCXCOMPL.NOME
                          FROM FXCXCOMPL
                          WHERE FXCXCOMPL.CODCOLIGADA = FXCX.CODCOLIGADA
                            AND FXCXCOMPL.IDXCX = FXCX.IDXCX) IS NOT NULL
            THEN (SELECT FXCXCOMPL.NOME
                          FROM FXCXCOMPL
                          WHERE FXCXCOMPL.CODCOLIGADA = FXCX.CODCOLIGADA
                            AND FXCXCOMPL.IDXCX = FXCX.IDXCX)
          ELSE (SELECT FCFO.NOME
                 FROM FCFO (NOLOCK)
                      INNER JOIN FXCX AS FX (NOLOCK)
                            ON FX.IDXCX = FXCX.IDXCX
                      INNER JOIN FLAN (NOLOCK)
                            ON FLAN.CODCFO = FCFO.CODCFO
                            AND FLAN.IDXCX = FX.IDXCX)
    END,
     FXCX.TIPO,
     FXCX.DATAESTORNO

    FROM FXCX
    WHERE FXCX.DATA <= '2010-01-18'
      AND  FXCX.DATA >= '2010-01-18'
       AND  FXCX.COMPENSADO <> 2
        AND (  FXCX.CODCOLIGADA = 1 )
         and  FXCX.CODCXA = '000380-7'
          and FXCX.VALOR > 0
            AND FXCX.DATACANCELAMENTO IS NULL
              AND FXCX.TIPO NOT IN ('8','9')
                  AND FXCX.DATAESTORNO IS NULL   
    UNION ALL
    SELECT
     FXCX.VALOR,
     '0',
    CONVERT (VARCHAR,FXCX.DATA,103),
     CONVERT(VARCHAR,FXCX.DATACOMPENSACAO,103),
     FXCX.NUMERODOCUMENTO,
     FXCX.IDXCX,
    CASE WHEN FXCX.NOMINAL IS NOT NULL
          THEN FXCX.NOMINAL
             WHEN FXCX.TIPO = '1'
          THEN (SELECT DISTINCT FCXA.DESCRICAO
                FROM FCXA
                WHERE  FXCX.CODCOLCXA = FCXA.CODCOLIGADA
                AND FXCX.CODCXA = FCXA.CODCXA)
    WHEN (SELECT FXCXCOMPL.NOME
                          FROM FXCXCOMPL
                          WHERE FXCXCOMPL.CODCOLIGADA = FXCX.CODCOLIGADA
                            AND FXCXCOMPL.IDXCX = FXCX.IDXCX) IS NOT NULL
            THEN (SELECT FXCXCOMPL.NOME
                          FROM FXCXCOMPL
                          WHERE FXCXCOMPL.CODCOLIGADA = FXCX.CODCOLIGADA
                            AND FXCXCOMPL.IDXCX = FXCX.IDXCX)
          ELSE (SELECT FCFO.NOME
                 FROM FCFO (NOLOCK)
                      INNER JOIN FXCX AS FX (NOLOCK)
                            ON FX.IDXCX = FXCX.IDXCX
                      INNER JOIN FLAN (NOLOCK)
                            ON FLAN.CODCFO = FCFO.CODCFO
                            AND FLAN.IDXCX = FX.IDXCX)
    END,
     FXCX.TIPO,
     FXCX.DATAESTORNO

    FROM FXCX
    WHERE FXCX.DATA <= '2010-01-18'
      AND  FXCX.DATA >= '2010-01-18'
       AND  FXCX.COMPENSADO <> 2
        AND (  FXCX.CODCOLIGADA = 1 )
         and  FXCX.CODCXA = '000380-7'
              AND FXCX.DATACANCELAMENTO IS NULL
              AND FXCX.TIPO NOT IN ('8','9')
                  AND FXCX.DATAESTORNO IS NOT  NULL   
    ORDER BY 3,2

    terça-feira, 19 de janeiro de 2010 11:42

Respostas

  • Olá Ronnie Von,

    Como o DateFormat está MDY e a data é YMD pode acontecer de dar problema (não necessariamente).
    Você pode utilizar o comando SET DATEFORMAT YMD antes da consulta ou então passar as datas no formato YYYYMMDD (ex: 20100118).

    Recomendo alterar o formato da data, pois, o uso do SET DATEFORMAT pode levar a recompilações de SP.

    É como digo, use o formato YYYYMMDD (sem hífen) e você não terá problemas desse tipo (independente de qualquer outra configuração).

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Recuperando o nome dos elementos em um documento XML no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!914.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 19 de janeiro de 2010 13:18
    • Marcado como Resposta Ronnie Von terça-feira, 19 de janeiro de 2010 13:25
    terça-feira, 19 de janeiro de 2010 13:18

Todas as Respostas

  • ronnie, qual o datatype desta duas colunas?
    CONVERT (VARCHAR,FXCX.DATA,103)AS dt$,
     CONVERT (VARCHAR, FXCX.DATACOMPENSACAO,103) AS 'DT',

    se nao for datetime, acredito que vc tenha um valor inválido em um registro que pode ser verificado com codigo abaixo

    declare @tableteste as table (data varchar(10))
    insert into @tableteste values('2010-02-22')
    insert into @tableteste values('2010/02\22')
    -- retorna registro inválidos
    select * from @tableteste where isdate(data)=0


    att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    terça-feira, 19 de janeiro de 2010 11:48
    Moderador
  • Bom Dia,

    Para evitar problemas com datas eu sugiro trabalhar sempre no formato YYYYMMDD sem o hífen.
    Qual o resultado do comando DBCC USEROPTIONS ?

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Recuperando o nome dos elementos em um documento XML no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!914.entry


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 19 de janeiro de 2010 12:34
  • Gustavo o Resultado do Comando e esse..

    textsize 2147483647
    language us_english
    dateformat mdy
    datefirst 7
    lock_timeout -1
    quoted_identifier SET
    arithabort SET
    ansi_null_dflt_on SET
    ansi_warnings SET
    ansi_padding SET
    ansi_nulls SET
    concat_null_yields_null SET
    isolation level read committed
    terça-feira, 19 de janeiro de 2010 12:58
  • Ronnie,

    Verifique a linha dateformat esta configurada como mdy e você esta passando as datas no formato ymd, acredito que deveriámos alterar esta configuração para você poder armazenar os valores de data e hora no formato desejado.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 19 de janeiro de 2010 13:03
  • Deixa ver se entendi Gustavo, estou trazendo o campo data assim FXCX.DATA >= '2010-01-18'
    da forma que esta configurado deveria ser assim FXCX.DATA >= '18-01-2010', seria isso, eu estou errado?


    terça-feira, 19 de janeiro de 2010 13:06
  • Olá Ronnie Von,

    Como o DateFormat está MDY e a data é YMD pode acontecer de dar problema (não necessariamente).
    Você pode utilizar o comando SET DATEFORMAT YMD antes da consulta ou então passar as datas no formato YYYYMMDD (ex: 20100118).

    Recomendo alterar o formato da data, pois, o uso do SET DATEFORMAT pode levar a recompilações de SP.

    É como digo, use o formato YYYYMMDD (sem hífen) e você não terá problemas desse tipo (independente de qualquer outra configuração).

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Recuperando o nome dos elementos em um documento XML no SQL Server
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!914.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Gustavo Maia Aguiar terça-feira, 19 de janeiro de 2010 13:18
    • Marcado como Resposta Ronnie Von terça-feira, 19 de janeiro de 2010 13:25
    terça-feira, 19 de janeiro de 2010 13:18
  • Ok, obrigado Gustavo vou fazer a alteração conforme voce sugeriu, vou usar o  formato YYYYMMDD ..



    Obrigado
    terça-feira, 19 de janeiro de 2010 13:20
  • Maia,

    Foi justamente essa orientação que postei anteriormente, a forma que o dado esta sendo passado este conflitando com o formato configura no SQL Server.


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 19 de janeiro de 2010 13:21