Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro na execução

Bom dia, pessoal!

Poderiam me ajudar a encontrar onde eu estou errando, please?

DECLARE @CPF VARCHAR(15);
DECLARE @DATA_NASCIMENTO DATE;
DECLARE @IDADE INT;
SET @CPF = '1471156710';
SELECT @DATA_NASCIMENTO = [DATA DE NASCIMENTO] FROM [TABELA DE CLIENTES] WHERE CPF = @CPF;
PRINT 'A idade do cliente, cujo CPF é  ' + @CPF + '  é  ' + DATEDIFF(YEAR, @DATA_NASCIMENTO, GETDATE());

A mensagem de erro:

Mensagem 245, Nível 16, Estado 1, Linha 12
Falha ao converter o varchar valor 'A idade do cliente, cujo CPF é 1471156710 é ' para o tipo de dados int.

obrigada! :)

2 respostas
solução!

Oi, Ana! Como está?

O erro que você está enfrentando ocorre porque a função DATEDIFF retorna um valor INT e você está tentando concatená-lo diretamente com uma string. Neste caso, o SQL Server tentou converter toda a expressão para um INT, em vez de fazer o inverso!

Para resolver este problema, podemos converter explicitamente o valor de @IDADE para uma string antes de realizar a concatenação, deste modo:

DECLARE @CPF VARCHAR(15);
DECLARE @DATA_NASCIMENTO DATE;
DECLARE @IDADE INT;
SET @CPF = '1471156710';
SELECT @DATA_NASCIMENTO = [DATA DE NASCIMENTO] FROM [TABELA DE CLIENTES] WHERE CPF = @CPF;
PRINT 'A idade do cliente, cujo CPF é ' + @CPF + ' é ' + CAST(DATEDIFF(YEAR, @DATA_NASCIMENTO, GETDATE()) AS VARCHAR(10));

Note que, na última linha, adicionei CAST(... AS VARCHAR(10)) em torno da função DATEDIFF para garantir que seu valor seja tratado como uma string ao ser concatenado com o restante da mensagem!

Caso queira saber um pouco mais sobre o CAST, recomendo a leitura do material abaixo:

Espero ter ajudado, Ana! Qualquer dúvida, estarei por aqui.

Um abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigada, Adriele!! Com o vídeo seguinte, eu percebi o que estava errado!