Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como habilitar o operador de concatenação de pipes no MySQL


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 seu sql_mode
  • Definir sql_mode para ANSI .

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.