sql >> Databasteknik >  >> RDS >> Mysql

Hur man aktiverar Pipe Concatenation Operator i MySQL

MySQL stöder användningen av rörsammansättningsoperatorn (|| ) för att sammanfoga dess operander. Du måste dock aktivera det först.

Som standard behandlar MySQL || som en logisk OR operatör (även om denna behandling för närvarande är utfasad). ANSI-standarden kräver dock att || är en sammanlänkningsoperatör. Du kanske har kod som redan använder rörsammansättningsoperatorn, och du vill helst inte gå igenom och ändra koden för att använda CONCAT() funktion.

Lyckligtvis ger MySQL oss möjligheten att specificera om det ska behandlas som en logisk OR operator eller en sammanlänkningsoperator.

Du kan aktivera || som en sammanlänkningsoperator genom att ställa in tillämpligt alternativ i ditt sql_mode .

Du har två alternativ:

  • Lägg till PIPES_AS_CONCAT till ditt sql_mode
  • Ställ in sql_mode till ANSI .

Alternativ 1

Här lägger jag till PIPES_AS_CONCAT till mitt sql_mode :

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

Det är sant att jag bara kunde ha gått sql_mode = 'PIPES_AS_CONCAT' , men jag skulle ha tappat alla befintliga alternativ. Att använda ovanstående teknik säkerställer att jag inte förlorar några befintliga alternativ.

Alternativ 2

Ett annat sätt att göra det är att ställa in sql_mode till ANSI :

SET sql_mode='ANSI';

ANSI läget ändrar syntax och beteende för att överensstämma mer med standard SQL.

Kontrollera ditt sql_mode

Du kan kontrollera ditt sql_mode så här:

SELECT @@sql_mode;

Resultat:

REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI

Det är resultatet jag får efter att ha ändrat till ANSI läge. Vi kan se PIPES_AS_CONCAT ingår i listan med alternativ.

Konkateneringsexempel

Efter att ha ställt in sql_mode med någon av ovanstående tekniker kan vi nu använda || som rörsammansättningsoperatör:

SELECT 'Homer' || 'Symptom';

Resultat:

HomerSymptom

Om vi ​​inte hade aktiverat rörsammansättningsoperatören hade vi med största sannolikhet fått ett oväntat resultat, med en varning.


  1. Förstå effekterna av hög latens i High Availability MySQL- och MariaDB-lösningar

  2. SQLAlchemy create_all() skapar inte tabeller

  3. Utmaningslösningar för nummerseriegenerator – del 1

  4. Hur jämför jag två rader från samma tabell (SQL-server)?