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

Cómo funciona CAST() en MariaDB

En MariaDB, CAST() 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.

CAST() funciona de forma similar a CONVERT() .

Sintaxis

La sintaxis es así:

CAST(expr AS type)

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

Ejemplo

He aquí un ejemplo simple:

SELECT CAST(123.45 AS INT);

Resultado:

+---------------------+
| CAST(123.45 AS INT) |
+---------------------+
|                 123 |
+---------------------+

Esto transformó el valor en un número entero y, por lo tanto, se eliminaron los lugares decimales.

Aquí hay otro ejemplo:

SELECT CAST('2020-01-01' AS DATETIME);

Resultado:

+--------------------------------+
| CAST('2020-01-01' AS 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 CAST('1 Jan, 2020' AS DATE);

Resultado:

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

Aquí, MariaDB aparentemente no pudo descubrir 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

Es posible especificar un conjunto de caracteres para usar como valor de retorno cuando se usa CAST() función.

Ejemplo:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";

Resultado:

+--------+------------------+-------------------+-----------------+
| 123    | utf16            | latin1            | big5            |
+--------+------------------+-------------------+-----------------+
| binary | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |
+--------+------------------+-------------------+-----------------+

Aquí, usamos COLLATION() función para devolver la intercalación de cada valor después de que se haya convertido al nuevo tipo de datos. Cada valor utiliza la intercalación predeterminada para el conjunto de caracteres especificado.

El valor inicial no es una cadena, por lo que COLLATION() devuelve binario.

Convirtiendo a CHAR sin especificar el conjunto de caracteres dará como resultado la collation_connection se está utilizando la intercalación del juego de caracteres.

Especifique una colación

También es posible especificar una colación.

Ejemplo:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

Resultado:

+--------+--------------------+-------------------+-----------------------+
| 123    | utf16              | latin1            | big5                  |
+--------+--------------------+-------------------+-----------------------+
| binary | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |
+--------+--------------------+-------------------+-----------------------+

En este caso, especificamos explícitamente una intercalación para usar que no es la intercalación predeterminada para el juego de caracteres especificado (aunque sigue siendo una intercalación válida para el juego de caracteres).

Especificar una intercalación que no es válida para el conjunto de caracteres da como resultado un error.

Esto es lo que sucede cuando cambio las dos primeras intercalaciones:

SELECT 
    COLLATION(123) AS "123",
    COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16",
    COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1",
    COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";

Resultado:

ERROR 1253 (42000): COLLATION 'latin1_german2_ci' is not valid for CHARACTER SET 'utf16'

Llegó al primero y arrojó un error, porque latin1_german2_ci no es una intercalación válida para utf16 juego 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 CAST(null AS DATETIME);

Resultado:

+------------------------+
| CAST(null AS DATETIME) |
+------------------------+
| NULL                   |
+------------------------+

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

SELECT CAST(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 CAST() sin pasar un argumento da como resultado un error:

SELECT CAST();

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