W MariaDB, CAST()
to wbudowana funkcja, która konwertuje wartość na inny typ danych. Pobiera wartość jednego typu i zwraca wartość określonego typu.
Podajesz wartość jako argument podczas wywoływania funkcji, a także typ, na który chcesz ją przekonwertować.
CAST()
działa podobnie do CONVERT()
.
Składnia
Składnia wygląda tak:
CAST(expr AS type)
Gdzie expr
jest wartością do konwersji, a type
to typ danych, na który chcesz go przekonwertować.
Przykład
Oto prosty przykład:
SELECT CAST(123.45 AS INT);
Wynik:
+---------------------+ | CAST(123.45 AS INT) | +---------------------+ | 123 | +---------------------+
Spowodowało to przekształcenie wartości w liczbę całkowitą, a zatem miejsca po przecinku zostały usunięte.
Oto kolejny przykład:
SELECT CAST('2020-01-01' AS DATETIME);
Wynik:
+--------------------------------+ | CAST('2020-01-01' AS DATETIME) | +--------------------------------+ | 2020-01-01 00:00:00 | +--------------------------------+
W tym przypadku przekonwertowaliśmy ciąg na DATETIME
typ danych.
Niepowodzenie konwersji
W poprzednim przykładzie podaliśmy prawidłową DATE
ciąg (lub DATE
dosłowny). Dlatego MariaDB była w stanie przekonwertować wartość na DATETIME
typ danych.
Oto jednak, co się dzieje, gdy podamy nieprawidłową DATE
ciąg:
SELECT CAST('1 Jan, 2020' AS DATE);
Wynik:
+-----------------------------+ | CAST('1 Jan, 2020' AS DATE) | +-----------------------------+ | NULL | +-----------------------------+
Tutaj MariaDB najwyraźniej nie mogła dowiedzieć się, jak przekonwertować tę wartość i zwróciła NULL
.
W tym przypadku moglibyśmy użyć innej funkcji, takiej jak STR_TO_DATE()
aby wykonać taką konwersję:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Wynik:
+-----------------------------------------+ | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') | +-----------------------------------------+ | 2020-01-01 | +-----------------------------------------+
Określ zestaw znaków
Możliwe jest określenie zestawu znaków, który będzie używany jako wartość zwracana podczas korzystania z CAST()
funkcjonować.
Przykład:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";
Wynik:
+--------+------------------+-------------------+-----------------+ | 123 | utf16 | latin1 | big5 | +--------+------------------+-------------------+-----------------+ | binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci | +--------+------------------+-------------------+-----------------+
Tutaj użyliśmy COLLATION()
funkcja zwracająca sortowanie każdej wartości po jej rzutowaniu na nowy typ danych. Każda wartość używa domyślnego sortowania dla określonego zestawu znaków.
Wartość początkowa nie jest ciągiem, więc COLLATION()
zwraca binarny.
Konwersja do CHAR
bez określenia zestawu znaków spowoduje to collation_connection
używane sortowanie zestawu znaków.
Określ sortowanie
Możliwe jest również określenie sortowania.
Przykład:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
Wynik:
+--------+--------------------+-------------------+-----------------------+ | 123 | utf16 | latin1 | big5 | +--------+--------------------+-------------------+-----------------------+ | binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci | +--------+--------------------+-------------------+-----------------------+
W tym przypadku jawnie określiliśmy sortowanie do użycia, które nie jest sortowaniem domyślnym dla określonego zestawu znaków (chociaż nadal jest poprawnym sortowaniem dla zestawu znaków).
Określenie sortowania, które nie jest prawidłowe dla zestawu znaków, powoduje błąd.
Oto, co się dzieje, gdy zamieniam pierwsze dwie sortowania:
SELECT
COLLATION(123) AS "123",
COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
Wynik:
ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'
Dotarł do pierwszego i wyrzucił błąd, ponieważ latin1_german2_ci
nie jest poprawnym sortowaniem dla utf16
zestaw znaków.
Zobacz tę listę sortowań dostępnych w MariaDB, aby uzyskać pełną listę sortowań i pasujących do nich zestawów znaków.
Argumenty zerowe
Próbuję przekonwertować null
zwraca null
:
SELECT CAST(null AS DATETIME);
Wynik:
+------------------------+ | CAST(null AS DATETIME) | +------------------------+ | NULL | +------------------------+
Jednak przekazanie null
bez określenia nowego typu danych powoduje błąd:
SELECT CAST(null);
Wynik:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
Brakujący argument
Wywołanie CAST()
bez przekazania argumentu powoduje błąd:
SELECT CAST();
Wynik:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1