W MariaDB CONVERT()
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ć.
CONVERT()
jest podobny do CAST()
.
Składnia
CONVERT()
funkcja może być wywołana przy użyciu składni ODBC lub składni SQL92.
Składnia ODBC:
CONVERT(expr, type)
Składnia SQL92:
CONVERT(expr USING charset)
Gdzie expr
jest wartością do konwersji, type
to typ danych, na który chcesz go przekonwertować.
Używając składni SQL92, charset
to zestaw znaków, na który chcesz go przekonwertować.
Przykład
Oto prosty przykład:
SELECT CONVERT(123.45, INT);
Wynik:
+----------------------+ | CONVERT(123.45, INT) | +----------------------+ | 123 | +----------------------+
Spowodowało to przekształcenie wartości na liczbę całkowitą, która usunęła miejsca dziesiętne.
Oto kolejny przykład:
SELECT CONVERT('2020-01-01', DATETIME);
Wynik:
+---------------------------------+ | CONVERT('2020-01-01', 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 CONVERT('1 Jan, 2020', DATE);
Wynik:
+------------------------------+ | CONVERT('1 Jan, 2020', DATE) | +------------------------------+ | NULL | +------------------------------+
W tym przypadku MariaDB 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
Składnia SQL92 pozwala nam określić zestaw znaków do konwersji.
Przykład:
SELECT CONVERT('ไม้เมือง' USING tis620);
Wynik:
+--------------------------------------------------+ | CONVERT('ไม้เมือง' USING tis620) | +--------------------------------------------------+ | ไม้เมือง | +--------------------------------------------------+
Zmiana zestawu znaków spowoduje również zmianę sortowania tak, aby było sortowaniem domyślnym dla tego zestawu znaków.
Powyższy przykład tak naprawdę nie pokazuje, jak zmienił się zestaw znaków/porównanie.
Na szczęście możemy użyć funkcji takich jak CHARSET()
i COLLATION()
aby zobaczyć, jak zmienił się zestaw znaków i sortowanie:
SELECT
CHARSET('ไม้เมือง') AS a,
COLLATION('ไม้เมือง') AS b,
CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Wynik:
+------+-----------------+--------+----------------+ | a | b | c | d | +------+-----------------+--------+----------------+ | utf8 | utf8_general_ci | tis620 | tis620_thai_ci | +------+-----------------+--------+----------------+
Pierwszy używa zestawu znaków i sortowania do mojego połączenia. Drugi używa zestawu znaków, który wyraźnie określiliśmy za pomocą CONVERT()
, a także domyślne sortowanie dla tego zestawu 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 CONVERT(null, DATETIME);
Wynik:
+-------------------------+ | CONVERT(null, DATETIME) | +-------------------------+ | NULL | +-------------------------+
Jednak przekazanie null
bez określenia nowego typu danych powoduje błąd składni:
SELECT CONVERT(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 CONVERT()
bez przekazania argumentu powoduje błąd składni:
SELECT CONVERT();
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