sql >> Base de Datos >  >> RDS >> Mysql

Cómo habilitar el operador de concatenación de tuberías en MySQL

MySQL admite el uso del operador de concatenación de tuberías (|| ) para concatenar sus operandos. Sin embargo, primero debe habilitarlo.

Por defecto, MySQL trata || como un OR lógico operador (aunque este tratamiento está actualmente en desuso). Sin embargo, el estándar ANSI requiere que || es un operador de concatenación. Tal vez tenga un código que ya usa el operador de concatenación de tubería, y preferiría no pasar y cambiar el código para usar el CONCAT() función.

Afortunadamente, MySQL nos brinda la capacidad de especificar si lo tratamos como un OR lógico operador o un operador de concatenación.

Puede habilitar || como operador de concatenación configurando la opción aplicable en su sql_mode .

Tienes dos opciones:

  • Añadir PIPES_AS_CONCAT a su sql_mode
  • Establecer sql_mode a ANSI .

Opción 1

Aquí, agrego PIPES_AS_CONCAT a mi sql_mode :

SET sql_mode=(SELECT CONCAT(@@sql_mode,',PIPES_AS_CONCAT')); 

Es cierto que podría haber ido sql_mode = 'PIPES_AS_CONCAT' , pero habría perdido todas las opciones existentes. El uso de la técnica anterior asegura que no pierdo ninguna opción existente.

Opción 2

Otra forma de hacerlo es establecer el sql_mode a ANSI :

SET sql_mode='ANSI';

ANSI el modo cambia la sintaxis y el comportamiento para ajustarse más al SQL estándar.

Compruebe su sql_mode

Puede verificar su sql_mode así:

SELECT @@sql_mode;

Resultado:

REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI

Ese es el resultado que obtengo después de cambiar a ANSI modo. Podemos ver el PIPES_AS_CONCAT está incluido en la lista de opciones.

Ejemplo de concatenación

Después de configurar el sql_mode usando una de las técnicas anteriores, ahora podemos usar || como operador de concatenación de tuberías:

SELECT 'Homer' || 'Symptom';

Resultado:

HomerSymptom

Si no hubiéramos habilitado el operador de concatenación de tuberías, lo más probable es que hubiéramos obtenido un resultado inesperado, con una advertencia.