sql >> Databáze >  >> RDS >> Mysql

Jak povolit operátor zřetězení potrubí v MySQL

MySQL podporuje použití operátoru zřetězení potrubí (|| ) pro zřetězení jeho operandů. Nejprve jej však musíte povolit.

Ve výchozím nastavení MySQL zpracovává || jako logické OR operátor (ačkoli tato úprava je v současné době zastaralá). Standard ANSI však vyžaduje || je operátor zřetězení. Možná máte kód, který již používá operátor zřetězení potrubí, a raději byste neprocházeli a neměnili kód tak, aby používal CONCAT() funkce.

Naštěstí nám MySQL poskytuje možnost určit, zda s tím zacházet jako s logickým OR operátor nebo operátor zřetězení.

Můžete povolit || jako operátor zřetězení nastavením příslušné možnosti ve vašem sql_mode .

Máte dvě možnosti:

  • Přidejte PIPES_AS_CONCAT do vašeho sql_mode
  • Nastavte sql_mode na ANSI .

Možnost 1

Zde přidávám PIPES_AS_CONCAT do mého sql_mode :

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

Je pravda, že jsem mohl jít sql_mode = 'PIPES_AS_CONCAT' , ale ztratil bych všechny stávající možnosti. Použití výše uvedené techniky zajistí, že neztratím žádné existující možnosti.

Možnost 2

Dalším způsobem, jak to udělat, je nastavit sql_mode na ANSI :

SET sql_mode='ANSI';

ANSI režim mění syntaxi a chování tak, aby více odpovídaly standardnímu SQL.

Zkontrolujte svůj sql_mode

Můžete zkontrolovat svůj sql_mode takhle:

SELECT @@sql_mode;

Výsledek:

REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY,ANSI

To je výsledek, který dostanu po změně na ANSI režimu. Můžeme vidět PIPES_AS_CONCAT je zahrnuto v seznamu možností.

Příklad zřetězení

Po nastavení sql_mode pomocí jedné z výše uvedených technik můžeme nyní použít || jako operátor zřetězení potrubí:

SELECT 'Homer' || 'Symptom';

Výsledek:

HomerSymptom

Pokud bychom nepovolili operátor zřetězení potrubí, s největší pravděpodobností bychom dostali neočekávaný výsledek s varováním.


  1. Jak používat Průvodce křížovým dotazem v Accessu

  2. Potřeba převést Oracle merge na dotaz na PostgreSQL

  3. Ekvivalent k externím tabulkám Oracle v SQL Server

  4. Získejte v Oracle pouze datum bez času