sql >> Database >  >> RDS >> MariaDB

Hoe CONVERT() werkt in MariaDB

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

  1. Een tijdstempel in de database invoegen via ContentValues

  2. Een aangepaste ORDER BY-volgorde definiëren in mySQL

  3. Let op:Array naar string conversie in

  4. MySQL-updatetabel op basis van een andere tabelwaarde