In MariaDB, CONVERT()
is een ingebouwde functie die een waarde converteert naar een ander gegevenstype. Het heeft een waarde van één type en retourneert een waarde van het opgegeven type.
U geeft de waarde op als argument wanneer u de functie aanroept, evenals het type waarnaar u deze wilt converteren.
CONVERT()
lijkt op CAST()
.
Syntaxis
De CONVERT()
functie kan worden aangeroepen met ODBC-syntaxis of SQL92-syntaxis.
ODBC-syntaxis:
CONVERT(expr, type)
SQL92-syntaxis:
CONVERT(expr USING charset)
Waar expr
is de waarde om te converteren, type
is het gegevenstype waarnaar u het wilt converteren.
Met behulp van de SQL92-syntaxis, charset
is de tekenset waarnaar u het wilt laten converteren.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT CONVERT(123.45, INT);
Resultaat:
+----------------------+ | CONVERT(123.45, INT) | +----------------------+ | 123 | +----------------------+
Dit converteerde de waarde naar een geheel getal, waardoor de decimalen werden verwijderd.
Hier is nog een voorbeeld:
SELECT CONVERT('2020-01-01', DATETIME);
Resultaat:
+---------------------------------+ | CONVERT('2020-01-01', DATETIME) | +---------------------------------+ | 2020-01-01 00:00:00 | +---------------------------------+
In dit geval hebben we een string geconverteerd naar een DATETIME
gegevenstype.
Conversie mislukt
In het vorige voorbeeld hebben we een geldige DATE
. opgegeven tekenreeks (of DATE
letterlijk). Daarom kon MariaDB de waarde converteren naar een DATETIME
gegevenstype.
Dit is echter wat er gebeurt als we een ongeldige DATE
opgeven tekenreeks:
SELECT CONVERT('1 Jan, 2020', DATE);
Resultaat:
+------------------------------+ | CONVERT('1 Jan, 2020', DATE) | +------------------------------+ | NULL | +------------------------------+
Hier kon MariaDB niet achterhalen hoe deze waarde moest worden geconverteerd en retourneerde NULL
.
In dit geval zouden we een andere functie kunnen gebruiken, zoals STR_TO_DATE()
om een dergelijke conversie uit te voeren:
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Resultaat:
+-----------------------------------------+ | STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') | +-----------------------------------------+ | 2020-01-01 | +-----------------------------------------+
Geef een tekenset op
Met de SQL92-syntaxis kunnen we een tekenset specificeren waarnaar moet worden geconverteerd.
Voorbeeld:
SELECT CONVERT('ไม้เมือง' USING tis620);
Resultaat:
+--------------------------------------------------+ | CONVERT('ไม้เมือง' USING tis620) | +--------------------------------------------------+ | ไม้เมือง | +--------------------------------------------------+
Als u de tekenset wijzigt, wordt de sortering ook de standaardsortering voor die tekenset.
Het bovenstaande voorbeeld laat niet echt zien hoe de tekenset/sortering is veranderd.
Gelukkig kunnen we functies gebruiken zoals CHARSET()
en COLLATION()
om te zien hoe de tekenset en sortering is veranderd:
SELECT
CHARSET('ไม้เมือง') AS a,
COLLATION('ไม้เมือง') AS b,
CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Resultaat:
+------+-----------------+--------+----------------+ | a | b | c | d | +------+-----------------+--------+----------------+ | utf8 | utf8_general_ci | tis620 | tis620_thai_ci | +------+-----------------+--------+----------------+
De eerste gebruikt de tekenset en sortering voor mijn verbinding. De tweede gebruikt de tekenset die we expliciet hebben gespecificeerd met CONVERT()
, evenals de standaardsortering voor die tekenset.
Bekijk deze lijst met beschikbare sorteringen in MariaDB voor een volledige lijst van sorteringen en hun overeenkomende tekensets.
Nullargumenten
Probeert null
te converteren retourneert null
:
SELECT CONVERT(null, DATETIME);
Resultaat:
+-------------------------+ | CONVERT(null, DATETIME) | +-------------------------+ | NULL | +-------------------------+
Echter, null
. doorgeven zonder het nieuwe gegevenstype op te geven resulteert in een syntaxisfout:
SELECT CONVERT(null);
Resultaat:
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
Ontbrekend argument
CONVERT()
. aanroepen zonder een argument door te geven resulteert in een syntaxisfout:
SELECT CONVERT();
Resultaat:
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