sql >> Base de Datos >  >> RDS >> MariaDB

Cómo funciona CONVERT() en MariaDB

En MariaDB, CONVERT() es una función incorporada que convierte un valor a otro tipo de datos. Toma un valor de un tipo y devuelve un valor del tipo especificado.

Proporcionas el valor como argumento cuando llamas a la función, así como el tipo al que te gustaría convertirla.

CONVERT() es similar a CAST() .

Sintaxis

El CONVERT() la función se puede llamar utilizando la sintaxis ODBC o la sintaxis SQL92.

Sintaxis ODBC:

CONVERT(expr, type)

Sintaxis de SQL92:

CONVERT(expr USING charset)

Donde expr es el valor a convertir, type es el tipo de datos al que desea que se convierta.

Usando la sintaxis de SQL92, charset es el conjunto de caracteres al que le gustaría convertirlo.

Ejemplo

He aquí un ejemplo simple:

SELECT CONVERT(123.45, INT);

Resultado:

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

Esto convirtió el valor en un número entero, lo que eliminó los lugares decimales.

Aquí hay otro ejemplo:

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

Resultado:

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

En este caso, convertimos una cadena en DATETIME tipo de datos.

Error de conversión

En el ejemplo anterior, proporcionamos un DATE válido cadena (o DATE literal). Por lo tanto, MariaDB pudo convertir el valor a un DATETIME tipo de datos.

Sin embargo, esto es lo que sucede cuando proporcionamos una DATE no válida cadena:

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

Resultado:

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

Aquí, MariaDB no pudo averiguar cómo convertir este valor y devolvió NULL .

En este caso, podríamos usar otra función, como STR_TO_DATE() para realizar tal conversión:

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

Resultado:

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

Especifique un juego de caracteres

La sintaxis de SQL92 nos permite especificar un conjunto de caracteres para convertir.

Ejemplo:

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

Resultado:

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

Cambiar el conjunto de caracteres también cambiará la intercalación para que sea la intercalación predeterminada para ese conjunto de caracteres.

El ejemplo anterior realmente no demuestra cómo ha cambiado el juego de caracteres o la intercalación.

Afortunadamente podemos usar funciones como CHARSET() y COLLATION() para ver cómo ha cambiado el juego de caracteres y la intercalación:

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

Resultado:

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

El primero usa el conjunto de caracteres y la intercalación para mi conexión. El segundo usa el conjunto de caracteres que especificamos explícitamente con CONVERT() , así como la intercalación predeterminada para ese conjunto de caracteres.

Consulte esta lista de colaciones disponibles en MariaDB para obtener una lista completa de colaciones y sus juegos de caracteres correspondientes.

Argumentos nulos

Intentando convertir null devuelve null :

SELECT CONVERT(null, DATETIME);

Resultado:

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

Sin embargo, pasar null sin especificar el nuevo tipo de datos da como resultado un error de sintaxis:

SELECT CONVERT(null);

Resultado:

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

Argumento faltante

Llamando a CONVERT() sin pasar un argumento da como resultado un error de sintaxis:

SELECT CONVERT();

Resultado:

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