I MariaDB, CONVERT()
er en indbygget funktion, der konverterer en værdi til en anden datatype. Det tager en værdi af én type og returnerer en værdi af den angivne type.
Du angiver værdien som et argument, når du kalder funktionen, såvel som den type, du gerne vil have den konverteret til.
CONVERT()
ligner CAST()
.
Syntaks
CONVERT()
funktion kan kaldes ved hjælp af ODBC-syntaks eller SQL92-syntaks.
ODBC-syntaks:
CONVERT(udtr., type)
SQL92-syntaks:
CONVERT(udg. BRUGER tegnsæt)
Hvor expr
er den værdi, der skal konverteres, type
er den datatype, du vil have den konverteret til.
Bruger SQL92-syntaksen, charset
er det tegnsæt, du gerne vil have det konverteret til.
Eksempel
Her er et simpelt eksempel:
VÆLG KONVERT(123.45, INT);
Resultat:
+-----------------------------+| KONVERTER(123.45, INT) |+----------------------------+| 123 |+------------------------------+
Dette konverterede værdien til et heltal, som fjernede decimalerne.
Her er et andet eksempel:
SELECT CONVERT('2020-01-01', DATETIME);
Resultat:
+--------------------------------+| KONVERTER('2020-01-01', DATOTIME) |+----------------------------------------+| 2020-01-01 00:00:00 |+----------------------------------------+
I dette tilfælde konverterede vi en streng til en DATETIME
datatype.
Konverteringsfejl
I det foregående eksempel angav vi en gyldig DATE
streng (eller DATE
bogstavelig). Derfor var MariaDB i stand til at konvertere værdien til en DATETIME
datatype.
Men her er, hvad der sker, når vi angiver en ugyldig DATE
streng:
SELECT CONVERT('1 Jan, 2020', DATE);
Resultat:
+--------------------------------------+| KONVERTER('1. jan. 2020', DATO) |+------------------------------------+| NULL |+-------------------------------------+
Her kunne MariaDB ikke finde ud af at konvertere denne værdi og returnerede NULL
.
I dette tilfælde kunne vi bruge en anden funktion, såsom STR_TO_DATE()
for at udføre en sådan konvertering:
SELECT STR_TO_DATE('1. jan. 2020', '%e %M, %Y');
Resultat:
+------------------------------------------------+| STR_TO_DATE('1. jan. 2020', '%e %M, %Y') |+----------------------------- ------------+| 01-01-2020 |+------------------------------------------------+
Angiv et tegnsæt
SQL92-syntaksen giver os mulighed for at angive et tegnsæt, der skal konverteres til.
Eksempel:
VÆLG KONVERTER('ไม้เมือง' BRUGER tis620);
Resultat:
+---------------------------------------------- ----+| KONVERTER('ไม้เมือง' VED HJÆLP AF tis620) |+--------------------------------------- -----------+| ไม้เมือง |+-------------------------------------------------------- ----+
Ændring af tegnsættet vil også ændre sorteringen til at være standardsorteringen for det pågældende tegnsæt.
Ovenstående eksempel viser ikke rigtig, hvordan tegnsættet/sorteringen har ændret sig.
Heldigvis kan vi bruge funktioner såsom CHARSET()
og SAMLING()
for at se, hvordan tegnsættet og sorteringen har ændret sig:
Resultat:
+------+-----------------+--------+----------- ----+| en | b | c | d |+------+-----------------+--------+------------- ---+| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |+------+----------------+--------+------------- ---+
Den første bruger tegnsættet og sorteringen til min forbindelse. Den anden bruger det tegnsæt, som vi eksplicit specificerede med CONVERT()
, samt standardsorteringen for det pågældende tegnsæt.
Se denne liste over sorteringer, der er tilgængelige i MariaDB for en komplet liste over sorteringer og deres matchende tegnsæt.
Nul-argumenter
Forsøger at konvertere null
returnerer null
:
VÆLG KONVERT(nul, DATOTIME);
Resultat:
+------------------------+| KONVERTER(nul, DATOTIME) |+-------------------------+| NULL |+-------------------------+
Men sender null
uden at angive den nye datatype resulterer det i en syntaksfejl:
SELECT CONVERT(null);
Resultat:
FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ')' på linje 1
Manglende argument
Kalder CONVERT()
uden at sende et argument resulterer det i en syntaksfejl:
VÆLG KONVERT();
Resultat:
FEJL 1064 (42000):Du har en fejl i din SQL-syntaks; tjek manualen, der svarer til din MariaDB-serverversion for den rigtige syntaks til brug i nærheden af ')' på linje 1