Se você já tentou concatenar uma string com um número ao usar o SQL Server, mas recebeu um erro, este artigo deve esclarecer as coisas para você. Há mais de uma maneira de realizar a concatenação usando o T-SQL no SQL Server e, se você estiver concatenando tipos de dados diferentes (como uma string e um número), poderá receber um erro, dependendo de como fizer a concatenação.
A coisa a lembrar ao concatenar diferentes tipos de dados é que eles precisam ser convertidos no mesmo tipo de dados primeiro. Mais especificamente, ao concatenar uma string com um número, o número precisará ser convertido em uma string antes que possa ser concatenado com a string. Felizmente, o SQL Server/T-SQL torna isso muito fácil.
Este artigo apresenta seis maneiras de concatenar strings com números usando T-SQL.
A função CONCAT()
A maneira mais óbvia (e possivelmente a melhor) de concatenar uma string e um número é usar o
CONCAT()
função. Isso permite que você forneça a string e o número como dois argumentos separados. O SQL Server irá concatená-los e sua concatenação estará completa. Exemplo
SELECT CONCAT('Comments: ', 9) AS Result;
Resultado:
Result ----------- Comments: 9
Como você pode ver, isso funciona perfeitamente. A string e o número são apresentados como um campo.
Observe que você não está limitado a apenas uma string e um número – o
CONCAT()
A função pode aceitar até 254 argumentos (ou seja, você pode juntar até 254 strings/números. Observe também que
CONCAT()
converte implicitamente todos os argumentos em tipos de string antes da concatenação. Além disso, CONCAT()
converte implicitamente quaisquer valores nulos em strings vazias. A função CONCAT_WS()
Podemos levar o exemplo anterior um passo adiante usando o
CONCAT_WS()
função. Esta função permite especificar um separador. Para fornecer um separador, basta adicioná-lo como o primeiro argumento. Em seguida, especifique a string e o número como segundo e terceiro argumentos.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Resultado:
Result ----------- Comments: 9
Observe que essa função não é necessariamente adequada para separar pares de nome/valor, pois o separador é adicionado entre cada item individual concatenado (portanto, também será adicionado entre cada par no caso de você ter vários pares). No nosso caso funciona bem, pois temos apenas um par nome/valor para concatenar.
No entanto, você sempre pode aninhar vários
CONCAT_WS()
funções para retornar a concatenação correta para suas necessidades (para que você possa ter um separador diferente entre cada par). A função CONVERT()
Se por algum motivo você não puder (ou não quiser) usar o
CONCAT()
ou CONCAT_WS()
funções, você pode realizar uma concatenação usando o operador de concatenação de strings (+
). Ao usar esse método, você precisará realizar todas as conversões de tipo de dados manualmente. Uma maneira de converter entre tipos de dados é usar o
CONVERT()
função. Veja como você faria isso usando os mesmos dados dos exemplos anteriores:
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Resultado:
Result ----------- Comments: 9
Nesse caso, converto o inteiro para varchar(12), mas isso pode ser qualquer tipo de dados e comprimento que você precisar.
A função CAST()
O
CAST()
função é muito semelhante ao CONVERT()
função. A principal diferença é que CAST()
é padrão ANSI e CONVERT()
é específico para T-SQL. Dito isso, CONVERT()
tem alguma funcionalidade extra, mas para os propósitos desses exemplos, você pode usar qualquer um. Aqui está o
CAST()
versão usando os mesmos dados dos exemplos anteriores:SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Resultado:
Result ----------- Comments: 9
A função TRY_CONVERT()
Um possível problema ao usar o
CONVERT()
função é que, se a conversão não for bem-sucedida, você receberá um erro. Embora isso seja bom em muitos casos, em alguns casos isso pode não ser desejável. Nesses casos, você pode encontrar TRY_CONVERT()
mais adequado. O
TRY_CONVERT()
função converte o tipo de dados assim como CONVERT()
função faz. No entanto, se os dados não puderem ser convertidos, ele retornará null
. Por exemplo, se tentarmos fazer o seguinte, recebemos um erro:
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Resultado:
Error: Arithmetic overflow error converting numeric to data type varchar.
No entanto, se usarmos
TRY_CONVERT()
, obtemos null
:SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Resultado:
Result ------ null
Você pode usar a programação condicional neste caso para executar uma tarefa diferente dependendo do resultado.
A função TRY_CAST()
O
TRY_CAST()
função funciona da mesma maneira. Ele converte o tipo de dados assim como o CAST()
função faz e, se os dados não puderem ser convertidos, ela retornará null
. Por exemplo, isso gera um erro:
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Resultado:
Error: Arithmetic overflow error converting numeric to data type varchar.
Mas se usarmos
TRY_CAST()
em vez disso, obtemos null
:SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Resultado:
Result ------ null