MySQL suporta o uso do operador de concatenação de pipe (
||
) para concatenar seus operandos. No entanto, você precisa habilitá-lo primeiro. Por padrão, o MySQL trata
||
como um OR
lógico operador (embora este tratamento esteja atualmente obsoleto). No entanto, o padrão ANSI exige que ||
é um operador de concatenação. Talvez você tenha um código que já use o operador de concatenação de pipe e prefira não alterar o código para usar o CONCAT()
função. Felizmente, o MySQL nos fornece a capacidade de especificar se devemos tratá-lo como um
OR
lógico operador ou um operador de concatenação. Você pode ativar
||
como um operador de concatenação definindo a opção aplicável em seu sql_mode
. Você tem duas opções:
- Adicionar
PIPES_AS_CONCAT
para o seusql_mode
- Definir
sql_mode
paraANSI
.
Opção 1
Aqui, adiciono
PIPES_AS_CONCAT
para meu sql_mode
:SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT'));
É verdade que eu poderia simplesmente ter ido
sql_mode = 'PIPES_AS_CONCAT'
, mas eu teria perdido todas as opções existentes. Usar a técnica acima garante que eu não perca nenhuma das opções existentes. Opção 2
Outra maneira de fazer isso é definir o
sql_mode
para ANSI
:SET sql_mode='ANSI';
ANSI
O modo altera a sintaxe e o comportamento para se adequar mais ao SQL padrão. Verifique seu sql_mode
Você pode verificar seu
sql_mode
assim:SELECT @@sql_mode;
Resultado:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI
Esse é o resultado que recebo depois de mudar para
ANSI
modo. Podemos ver o PIPES_AS_CONCAT
está incluído na lista de opções. Exemplo de concatenação
Depois de definir o
sql_mode
usando uma das técnicas acima, agora podemos usar ||
como um operador de concatenação de tubos:SELECT 'Homer' || 'Symptom';
Resultado:
HomerSymptom
Se não tivéssemos habilitado o operador de concatenação de pipe, provavelmente teríamos obtido um resultado inesperado, com um aviso.