W MariaDB CONCAT()
jest wbudowaną funkcją ciągu, która wykonuje konkatenację ciągów na swoich argumentach. Zwraca ciąg, który wynika z połączenia jego argumentów.
Konkatenacja to operacja łączenia dwóch lub więcej ciągów od końca do końca.
CONCAT()
akceptuje jeden lub więcej argumentów, z których wszystkie są zwracane jako jeden połączony ciąg.
Składnia
Składnia wygląda tak:
CONCAT( str1, str2, ... )
Gdzie str1, str2, …
reprezentują argumenty ciągu, dla których należy łączyć.
Przykład
Oto podstawowy przykład:
SELECT CONCAT('Homer', 'Jay');
Wynik:
+------------------------+ | CONCAT('Homer', 'Jay') | +------------------------+ | HomerJay | +------------------------+
W tym przypadku połączyliśmy dwa ciągi.
I znowu, ale tym razem dodajemy spację pomiędzy:
SELECT CONCAT('Homer', ' ', 'Jay');
Wynik:
+-----------------------------+ | CONCAT('Homer', ' ', 'Jay') | +-----------------------------+ | Homer Jay | +-----------------------------+
W tym przypadku połączyliśmy trzy ciągi.
Oto pięć:
SELECT CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson');
Wynik:
+---------------------------------------------+ | CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson') | +---------------------------------------------+ | Homer Jay Simpson | +---------------------------------------------+
Ciągi binarne
Jeśli którykolwiek z argumentów jest ciągiem binarnym, wynikiem jest ciąg binarny:
SELECT CONCAT(BINARY 'Homer', 'Jay');
Wynik:
+-------------------------------+ | CONCAT(BINARY 'Homer', 'Jay') | +-------------------------------+ | HomerJay | +-------------------------------+
Możemy użyć COLLATION()
funkcja sprawdzania sortowania wyniku:
SELECT COLLATION(CONCAT(BINARY 'Homer', 'Jay'));
Wynik:
+------------------------------------------+ | COLLATION(CONCAT(BINARY 'Homer', 'Jay')) | +------------------------------------------+ | binary | +------------------------------------------+
Jeśli usuniemy BINARY
operatora, otrzymujemy inny wynik:
SELECT COLLATION(CONCAT('Homer', 'Jay'));
Wynik:
+-----------------------------------+ | COLLATION(CONCAT('Homer', 'Jay')) | +-----------------------------------+ | utf8_general_ci | +-----------------------------------+
Ponadto, zgodnie z dokumentacją MariaDB, argumenty liczbowe są konwertowane na ich równoważną postać ciągu binarnego. Możesz tego uniknąć, wykonując jawne rzutowanie typu (za pomocą CAST()
lub CONVERT()
).
Argumenty zerowe
Jeśli którykolwiek z argumentów jest null
, CONCAT()
zwraca null
.
Jest jednak jeden wyjątek:w trybie Oracle (tj. sql_mode=ORACLE
), dowolne null
argumenty są po prostu ignorowane.
Najpierw zobaczmy, jak CONCAT()
zachowuje się w trybie domyślnym.
Ustaw naszą sesję w trybie domyślnym:
SET SESSION sql_mode=DEFAULT;
Teraz uruchom CONCAT()
z null
argument:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Wynik:
+--------------------------------------------+ | CONCAT('Homer', ' ', null, ' ', 'Simpson') | +--------------------------------------------+ | NULL | +--------------------------------------------+
Zgodnie z oczekiwaniami wynik to null
.
Przejdźmy teraz do trybu Oracle:
SET SESSION sql_mode=ORACLE;
A teraz uruchommy poprzednią CONCAT()
przykład ponownie:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Wynik:
+--------------------------------------------+ | CONCAT('Homer', ' ', null, ' ', 'Simpson') | +--------------------------------------------+ | Homer Simpson | +--------------------------------------------+
Tym razem zignorował null
argument i połączył wszystkie pozostałe wartości inne niż null
argumenty. Jeśli przyjrzysz się uważnie, zobaczysz, że połączył on obie spacje, więc między Homer
jest podwójna spacja i Simpson
.
Dla null
-bezpieczna alternatywa, użyj CONCAT_WS()
. Ta funkcja ignoruje null
wartości, nawet jeśli nie są w trybie Oracle.
Alternatywnie możesz użyć IFNULL()
aby zapewnić alternatywną (ciągową) wartość dla null
wartości (takie jak pusty ciąg).
Pojedynczy argument
Wywołanie CONCAT()
z tylko jednym argumentem po prostu zwraca ten argument:
SELECT CONCAT('Homer');
Wynik:
+-----------------+ | CONCAT('Homer') | +-----------------+ | Homer | +-----------------+
Brakujący argument
Wywołanie CONCAT()
bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT CONCAT();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONCAT'