MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona CONVERT() in MariaDB

In MariaDB, CONVERT() è una funzione incorporata che converte un valore in un altro tipo di dati. Prende un valore di un tipo e restituisce un valore del tipo specificato.

Fornisci il valore come argomento quando chiami la funzione, nonché il tipo in cui desideri che venga convertito.

CONVERT() è simile a CAST() .

Sintassi

Il CONVERT() la funzione può essere chiamata utilizzando la sintassi ODBC o la sintassi SQL92.

Sintassi ODBC:

CONVERT(expr, type)

Sintassi SQL92:

CONVERT(expr USING charset)

Dove expr è il valore da convertire, type è il tipo di dati in cui vuoi che venga convertito.

Usando la sintassi SQL92, charset è il set di caratteri in cui vorresti che fosse convertito.

Esempio

Ecco un semplice esempio:

SELECT CONVERT(123.45, INT);

Risultato:

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

Questo ha convertito il valore in un numero intero, rimuovendo le cifre decimali.

Ecco un altro esempio:

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

Risultato:

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

In questo caso, abbiamo convertito una stringa in un DATETIME tipo di dati.

Conversione fallita

Nell'esempio precedente, abbiamo fornito un DATE valido stringa (o DATE letterale). Pertanto MariaDB è stata in grado di convertire il valore in un DATETIME tipo di dati.

Tuttavia, ecco cosa succede quando forniamo un DATE non valido stringa:

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

Risultato:

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

Qui, MariaDB non è riuscita a capire come convertire questo valore e ha restituito NULL .

In questo caso, potremmo usare un'altra funzione, come STR_TO_DATE() per eseguire tale conversione:

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

Risultato:

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

Specifica un set di caratteri

La sintassi SQL92 ci consente di specificare un set di caratteri in cui convertire.

Esempio:

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

Risultato:

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

La modifica del set di caratteri cambierà anche le regole di confronto in modo che siano le regole di confronto predefinite per quel set di caratteri.

L'esempio sopra non mostra realmente come sia cambiato il set di caratteri/le regole di confronto.

Fortunatamente possiamo usare funzioni come CHARSET() e COLLATION() per vedere come sono cambiati il ​​set di caratteri e le regole di confronto:

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

Risultato:

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

Il primo usa il set di caratteri e le regole di confronto per la mia connessione. Il secondo usa il set di caratteri che abbiamo esplicitamente specificato con CONVERT() , nonché le regole di confronto predefinite per quel set di caratteri.

Vedi questo elenco di regole di confronto disponibili in MariaDB per un elenco completo delle regole di confronto e dei loro set di caratteri corrispondenti.

Argomenti nulli

Tentativo di convertire null restituisce null :

SELECT CONVERT(null, DATETIME);

Risultato:

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

Tuttavia, passando null senza specificare il nuovo tipo di dati si verifica un errore di sintassi:

SELECT CONVERT(null);

Risultato:

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

Argomento mancante

Chiamando CONVERT() senza passare un argomento si verifica un errore di sintassi:

SELECT CONVERT();

Risultato:

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