Na maioria dos casos, concatenar uma string e um número no SQL não é diferente de concatenar duas strings.
A maioria dos DBMSs concatenará a string e o número como se fossem ambas strings. Isso ocorre porque o número geralmente é convertido em uma string antes da operação de concatenação.
A maioria dos principais RDBMSs fornece um
CONCAT()
função para operações de concatenação, bem como um CONCAT_WS()
função que permite especificar um separador para separar os argumentos concatenados. A maioria dos principais RDBMSs também inclui um operador de concatenação de strings, que nos permite concatenar seus operandos.
O CONCAT()
Função
A maioria dos principais RDBMSs fornece um
CONCAT()
função para concatenar seus argumentos de string. Geralmente, os argumentos que não são de string são convertidos em uma string antes que a concatenação ocorra. Exemplo:
SELECT CONCAT('Player', 456);
Resultado:
Player456
Se quisermos incluir um espaço entre os argumentos concatenados, podemos adicionar um espaço a uma das strings ou incluir um espaço como um argumento separado:
SELECT
CONCAT('Player ', 456) AS "Option 1",
CONCAT('Player', ' ', 456) AS "Option 2";
Resultado:
+------------+------------+ | Option 1 | Option 2 | +------------+------------+ | Player 456 | Player 456 | +------------+------------+
RDBMSs que possuem um
CONCAT()
incluem MySQL, MariaDB, SQL Server, Oracle e PostgreSQL. SQLite não tem um
CONCAT()
função. SQLite faz tem um operador de concatenação de strings (veja abaixo). O CONCAT_WS()
Função
Outra maneira de incluir um espaço é usar o
CONCAT_WS()
função. Esta função permite especificar um separador que será usado para separar todos os argumentos concatenados. Exemplo:
SELECT CONCAT_WS(' ', 'Player', 456);
Resultado:
Player 456
Esta função pode ser particularmente útil se você tiver muitos argumentos para concatenar:
SELECT CONCAT_WS(', ', 'Red', 2, 'Green', 456, 'Black');
Resultado:
Red, 2, Green, 456, Black
Nesses casos, você só precisa especificar o separador uma vez. Neste exemplo, especifiquei uma vírgula e um espaço como separador.
RDBMSs que possuem um
CONCAT_WS()
incluem MySQL, MariaDB, SQL Server e PostgreSQL. SQLite e Oracle não possuem um
CONCAT_WS()
funcionam, mas eles fazem tem um operador de concatenação de strings (veja abaixo). O Operador de Concatenação de String
A maioria dos RDBMSs inclui um operador de concatenação de strings que concatena seus operandos.
Se você estiver usando SQLite, esta é sua única opção.
Exemplo:
SELECT 'Player' || 456;
Resultado:
Player456
Observe que no MySQL, você precisará habilitar primeiro o operador de concatenação de pipe.
O mesmo vale para MariaDB.
SQL Server
O exemplo acima não funcionará no SQL Server. No SQL Server, use o sinal de mais (
+
) operador de concatenação de string. Além disso, o número também precisará ser convertido em uma string antes de tentar concatenar:
SELECT 'Player' + CAST(456 AS varchar(3));
Resultado:
Player456
Aqui está o que acontece se eu tentar fazer isso sem primeiro converter o número em uma string:
SELECT 'Player' + 456;
Resultado:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Player' to data type int.
O SQL Server pensa que estamos tentando adicionar dois números (porque
+
também é o operador de adição) e, portanto, retorna um erro, pois um dos operandos é uma string.