No MariaDB,
CAST()
é uma função interna que converte um valor em outro tipo de dados. Ele recebe um valor de um tipo e retorna um valor do tipo especificado. Você fornece o valor como um argumento ao chamar a função, bem como o tipo para o qual deseja convertê-la.
CAST()
funciona de forma semelhante a CONVERT()
. Sintaxe
A sintaxe fica assim:
CAST(expr AS type)
Onde
expr
é o valor a ser convertido e type
é o tipo de dados para o qual você deseja convertê-lo. Exemplo
Aqui está um exemplo simples:
SELECT CAST(123.45 AS INT);
Resultado:
+----------+| CAST(123,45 AS INT) |+---------------------+| 123 |+---------------------+
Isso converte o valor em um inteiro e, portanto, as casas decimais foram removidas.
Aqui está outro exemplo:
SELECT CAST('2020-01-01' AS DATETIME);
Resultado:
+--------------------------------+| CAST('2020-01-01' AS DATETIME) |+--------------------------------+| 2020-01-01 00:00:00 |+--------------------------------+
Nesse caso, convertemos uma string em um
DATETIME
tipo de dados. Falha na conversão
No exemplo anterior, fornecemos um
DATE
válido string (ou DATE
literal). Portanto, o MariaDB conseguiu converter o valor para um DATETIME
tipo de dados. No entanto, veja o que acontece quando fornecemos um
DATE
inválido fragmento:SELECT CAST('1 Jan, 2020' AS DATE);
Resultado:
+-----------------------------+| CAST('1 de janeiro de 2020' AS DATE) |+-----------------------------+| NULL |+-----------------------------+
Aqui, o MariaDB aparentemente não conseguiu descobrir como converter esse valor e retornou
NULL
. Nesse caso, poderíamos usar outra função, como
STR_TO_DATE()
para realizar tal conversão:SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Resultado:
+-----------------------------------------+| STR_TO_DATE('1 de janeiro de 2020', '%e %M, %Y') |+----------------------------- ------------+| 2020-01-01 |+------------------------------------------+Especifique um conjunto de caracteres
É possível especificar um conjunto de caracteres a ser usado para o valor de retorno ao usar oCAST()
função.
Exemplo:
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 |+--------+------------------+------------------- +-----------------+| binário | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |+--------+------------------+------------------- +-----------------+
Aqui, usamos oCOLLATION()
função para retornar o agrupamento de cada valor após ter sido convertido para o novo tipo de dados. Cada valor usa o agrupamento padrão para o conjunto de caracteres especificado.
O valor inicial não é uma string, entãoCOLLATION()
retorna binário.
Convertendo paraCHAR
sem especificar o conjunto de caracteres resultará nocollation_connection
agrupamento do conjunto de caracteres que está sendo usado.
Especificar um agrupamento
Também é possível especificar um agrupamento.
Exemplo:
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 |+--------+--------------------+----------------- --+-----------------------+| binário | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |+--------+--------------------+----------------- --+-----------------------+
Nesse caso, especificamos explicitamente uma ordenação a ser usada que não é a ordenação padrão para o conjunto de caracteres especificado (embora ainda seja uma ordenação válida para o conjunto de caracteres).
Especificar um agrupamento que não é válido para o conjunto de caracteres resulta em um erro.
Aqui está o que acontece quando eu troco os dois primeiros agrupamentos:
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:
ERRO 1253 (42000):COLLATION 'latin1_german2_ci' não é válido para CHARACTER SET 'utf16'
Chegou ao primeiro e deu um erro, porquelatin1_german2_ci
não é um agrupamento válido para outf16
conjunto de caracteres.
Veja esta lista de ordenações disponíveis no MariaDB para obter uma lista completa de ordenações e seus conjuntos de caracteres correspondentes.
Argumentos nulos
Tentando converternull
retornanull
:
SELECT CAST(null AS DATETIME);
Resultado:
+------------------------+| CAST(null AS DATETIME) |+------------------------+| NULO |+------------------------+
No entanto, passandonull
sem especificar o novo tipo de dados resulta em um erro:
SELECT CAST(null);
Resultado:
ERRO 1064 (42000):Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MariaDB para a sintaxe correta para usar perto de ')' na linha 1Argumento ausente
ChamandoCAST()
sem passar um argumento resulta em um erro:
SELECT CAST();
Resultado:
ERRO 1064 (42000):Você tem um erro em sua sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MariaDB para a sintaxe correta para usar perto de ')' na linha 1