MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como CAST() funciona no MariaDB


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 o CAST() 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 o COLLATION() 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ão COLLATION() retorna binário.

Convertendo para CHAR sem especificar o conjunto de caracteres resultará no collation_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, porque latin1_german2_ci não é um agrupamento válido para o utf16 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 converter null retorna null :
SELECT CAST(null AS DATETIME); 

Resultado:
+------------------------+| CAST(null AS DATETIME) |+------------------------+| NULO |+------------------------+

No entanto, passando null 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 1

Argumento ausente


Chamando CAST() 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