none
Conversion failed when converting datetime from character string. RRS feed

  • Pergunta

  • Tenho uma stored procedure

     

    q tem os seguintes dados

    @NASCIMENTO CHAR(10) = NULL

     

    e em outra parte  converto ele assim

     

    CONVERT(DATETIME,@NASCIMENTO,103)

     

    esta dando este erro :

    Conversion failed when converting datetime from character string.

     

    o q pode estar acontecendo?

    quinta-feira, 1 de dezembro de 2011 12:13

Respostas

  • Brown,

     

    Imagino que o convert que esteja dando erro seja esse:

    NASCIMENTO = CONVERT(DATETIME,@NASCIMENTO,103),

    Voce teria que colocar um IF e verificar se a variavel @NASCIMENTO é uma data valida ou não.

    O problema é que voce esta passando ela como parametro, então a melhor opção, é colocar no começo da procedure um SET DATEFORMAT 

    MDY -> Se voce estiver passando 12012011

    MYD -> para 12201101

    DMY -> 01122011

    DYM -> 01201112

    YMD -> 20111201

    YDM -> 20110112

    E outra, voce esta recebendo como CHAR(10), algum motivo para isso?  Se os 10 caracteres não estiverem sendo preenchido, utilize as funções LTRIM e RTRIM para limpar espaços....



    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 1 de dezembro de 2011 12:47
    Moderador

Todas as Respostas

  • Brown,

     

    Voce esta tentando converter um valor que não esta no formato correto para datetime, exemplo:

    DECLARE @Var VARCHAR(100)

    SET @Var = 'Fabrizzio'

    SELECT CONVERT(DATETIME, @Var, 103)

     

    Para isolar esses casos, utilize a função ISDATE() = 0, ira retornar os valores que estão te causando problema....


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 1 de dezembro de 2011 12:17
    Moderador
  •  

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    ALTER PROCEDURE [dbo].[SGA06S101]

    @NASCIMENTO CHAR(10) = NULL

    AS
    DECLARE
    @INS bit
    BEGIN

        BEGIN TRANSACTION SGA06T101

      select
       @INS = case
                           when @cliente is null or @cliente = ''  then 1
                             else 0
                        end


     --RAISERROR ('Teste ',16, 1, 1654, 'teste')
      if @INS = 1
      begin
          SELECT @CLIENTE = CONVERT(VARCHAR(10),MAX(CONVERT(INT,CLIENTE)+1))
            FROM SGA06Q01
           WHERE UO = @UO
      end

        SELECT @CLIENTE = COALESCE(@CLIENTE,'1')

        IF @RESPONSAVEL = ''
            SELECT @RESPONSAVEL = NULL

      if @INS = 1
      begin
        INSERT INTO SGA06Q01
        (
           NASCIMENTO

        )
        SELECT    @DEFICIENCIA,    @PERFIL2,
      end
      else
      begin

        UPDATE SGA06Q01

     

                           NASCIMENTO = CONVERT(DATETIME,@NASCIMENTO,103),
                 end

      SELECT CLIENTE = @CLIENTE

        IF (@ATENDENTE IS NOT NULL) AND (@INS = 1)
        BEGIN
            -- GRAVA LOG DE EVENTOS

            INSERT INTO SGA06Q05
            (
            UO,
            CLIENTE,
            CONTATO,
            EVENTO,
            DETALHES,
            UO_ATENDENTE,
            ATENDENTE,
            OFERTA,
            GRUPO
            )
            SELECT
            @UO,
            @CLIENTE,
            GETDATE(),
            'Cliente / Novo',

            'Cadastro',
            @UO_ATENDENTE,
            @ATENDENTE,
            NULL,
            NULL
        END

        IF @@ERROR = 0
        BEGIN
            COMMIT TRANSACTION SGA06T101
        END
        ELSE
        BEGIN
            ROLLBACK TRANSACTION
        END
    END

     

    Fabrizzio, a stored procedure  é esta

    onde eu add esta função?

    quinta-feira, 1 de dezembro de 2011 12:29
  • Brown,

     

    Imagino que o convert que esteja dando erro seja esse:

    NASCIMENTO = CONVERT(DATETIME,@NASCIMENTO,103),

    Voce teria que colocar um IF e verificar se a variavel @NASCIMENTO é uma data valida ou não.

    O problema é que voce esta passando ela como parametro, então a melhor opção, é colocar no começo da procedure um SET DATEFORMAT 

    MDY -> Se voce estiver passando 12012011

    MYD -> para 12201101

    DMY -> 01122011

    DYM -> 01201112

    YMD -> 20111201

    YDM -> 20110112

    E outra, voce esta recebendo como CHAR(10), algum motivo para isso?  Se os 10 caracteres não estiverem sendo preenchido, utilize as funções LTRIM e RTRIM para limpar espaços....



    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    quinta-feira, 1 de dezembro de 2011 12:47
    Moderador
  • Fabrizzio, farei este teste 

    não sei o motivo para a data ser recvebida deste jeito melhor datetime

     

    irei verificar todas estas situações q vc levantou depoiis posto aqui abraço e obrigado

    quinta-feira, 1 de dezembro de 2011 13:18
  • Brown,

     

    Novidades neste assunto?


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    terça-feira, 6 de dezembro de 2011 11:58
    Moderador