sql >> Databasteknik >  >> RDS >> MariaDB

Hur CONVERT() fungerar i MariaDB

I MariaDB, CONVERT() är en inbyggd funktion som konverterar ett värde till en annan datatyp. Det tar ett värde av en typ och returnerar ett värde av den angivna typen.

Du anger värdet som ett argument när du anropar funktionen, samt den typ som du vill att den ska konverteras till.

CONVERT() liknar CAST() .

Syntax

CONVERT() funktionen kan anropas med ODBC-syntax eller SQL92-syntax.

ODBC-syntax:

CONVERT(expr, type)

SQL92-syntax:

CONVERT(expr USING charset)

Där expr är värdet som ska konverteras, type är den datatyp som du vill att den ska konverteras till.

Använder SQL92-syntaxen, charset är teckenuppsättningen du vill att den ska konverteras till.

Exempel

Här är ett enkelt exempel:

SELECT CONVERT(123.45, INT);

Resultat:

+----------------------+
| CONVERT(123.45, INT) |
+----------------------+
|                  123 |
+----------------------+

Detta konverterade värdet till ett heltal, vilket tog bort decimalerna.

Här är ett annat exempel:

SELECT CONVERT('2020-01-01', DATETIME);

Resultat:

+---------------------------------+
| CONVERT('2020-01-01', DATETIME) |
+---------------------------------+
| 2020-01-01 00:00:00             |
+---------------------------------+

I det här fallet konverterade vi en sträng till en DATETIME datatyp.

Konverteringsfel

I föregående exempel angav vi ett giltigt DATE sträng (eller DATE bokstavlig). Därför kunde MariaDB konvertera värdet till en DATETIME datatyp.

Men här är vad som händer när vi tillhandahåller ett ogiltigt DATE sträng:

SELECT CONVERT('1 Jan, 2020', DATE);

Resultat:

+------------------------------+
| CONVERT('1 Jan, 2020', DATE) |
+------------------------------+
| NULL                         |
+------------------------------+

Här kunde MariaDB inte ta reda på hur man konverterade detta värde och returnerade NULL .

I det här fallet kan vi använda en annan funktion, till exempel STR_TO_DATE() för att utföra en sådan konvertering:

SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');

Resultat:

+-----------------------------------------+
| STR_TO_DATE('1 Jan, 2020', '%e %M, %Y') |
+-----------------------------------------+
| 2020-01-01                              |
+-----------------------------------------+

Ange en teckenuppsättning

SQL92-syntaxen tillåter oss att ange en teckenuppsättning att konvertera till.

Exempel:

SELECT CONVERT('ไม้เมือง' USING tis620);

Resultat:

+--------------------------------------------------+
| CONVERT('ไม้เมือง' USING tis620)                   |
+--------------------------------------------------+
| ไม้เมือง                                           |
+--------------------------------------------------+

Om du ändrar teckenuppsättningen ändras också sorteringen till att vara standardsorteringen för den teckenuppsättningen.

Exemplet ovan visar inte riktigt hur teckenuppsättningen/sorteringen har förändrats.

Lyckligtvis kan vi använda funktioner som CHARSET() och COLLATION() för att se hur teckenuppsättningen och sorteringen har ändrats:

SELECT 
    CHARSET('ไม้เมือง') AS a,
    COLLATION('ไม้เมือง') AS b,
    CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
    COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;

Resultat:

+------+-----------------+--------+----------------+
| a    | b               | c      | d              |
+------+-----------------+--------+----------------+
| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |
+------+-----------------+--------+----------------+

Den första använder teckenuppsättningen och sorteringen för min anslutning. Den andra använder teckenuppsättningen som vi uttryckligen specificerade med CONVERT() , samt standardsorteringen för den teckenuppsättningen.

Se den här listan över sorteringar som är tillgängliga i MariaDB för en fullständig lista över sammanställningar och deras matchande teckenuppsättningar.

Nollargument

Försöker konvertera null returnerar null :

SELECT CONVERT(null, DATETIME);

Resultat:

+-------------------------+
| CONVERT(null, DATETIME) |
+-------------------------+
| NULL                    |
+-------------------------+

Men skickar null utan att ange den nya datatypen resulterar det i ett syntaxfel:

SELECT CONVERT(null);

Resultat:

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

Argument saknas

Anropar CONVERT() utan att skicka ett argument resulterar det i ett syntaxfel:

SELECT CONVERT();

Resultat:

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. Dela upp en miljardradstabell med fotbollsdata med hjälp av datakontext

  2. Laravel 5.2 - Använd en sträng som en anpassad primärnyckel för Eloquent Table blir 0

  3. 3 sätt att returnera rader som innehåller alfanumeriska tecken i SQL Server

  4. CONSTRAINT för att kontrollera värden från en fjärrrelaterade tabell (via join etc.)