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

Como CONVERT() funciona no MariaDB


No MariaDB, CONVERT() é uma função interna que converte um valor em outro tipo de dados. Ele aceita 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.

CONVERT() é semelhante a CAST() .

Sintaxe


O CONVERT() A função pode ser chamada usando a sintaxe ODBC ou a sintaxe SQL92.

Sintaxe ODBC:
CONVERT(expr, type) 

Sintaxe SQL92:
CONVERT(expr USING charset) 

Onde expr é o valor a ser convertido, type é o tipo de dados para o qual você deseja convertê-lo.

Usando a sintaxe SQL92, charset é o conjunto de caracteres para o qual você gostaria de convertê-lo.

Exemplo


Aqui está um exemplo simples:
SELECT CONVERT(123.45, INT); 

Resultado:
+----------------------+| CONVERT(123,45, INT) |+----------------------+| 123 |+----------------------+

Isso converteu o valor em um inteiro, que removeu as casas decimais.

Aqui está outro exemplo:
SELECT CONVERT('2020-01-01', DATETIME); 

Resultado:
+---------------------------------+| CONVERT('2020-01-01', 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 CONVERT('1 Jan, 2020', DATE); 

Resultado:
+------------------------------+| CONVERT('1 de janeiro de 2020', DATA) |+------------------------------+| NULL |+------------------------------+

Aqui, o MariaDB 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


A sintaxe SQL92 nos permite especificar um conjunto de caracteres para converter.

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

Resultado:
+---------------------------------------------- ----+| CONVERT('ไม้เมือง' USANDO tis620) |+--------------------------------------- -----------+| ไม้เมือง |+---------------------------------------------------------- ----+

Alterar o conjunto de caracteres também alterará o agrupamento para ser o agrupamento padrão para esse conjunto de caracteres.

O exemplo acima não demonstra realmente como o conjunto/agrupamento de caracteres mudou.

Felizmente podemos usar funções como CHARSET() e COLLATION() para ver como o conjunto de caracteres e o agrupamento foram alterados:
 SELECT 
    CHARSET('ไม้เมือง') AS a,
    COLLATION('ไม้เมือง') AS b,
    CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c,
    COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d; 

Resultado:
+------+-----------------+--------+------------ ----+| um | b | c | d |+------+-----------------+--------+----------------- ---+| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |+------+-----------------+--------+------------- ---+

O primeiro usa o conjunto de caracteres e o agrupamento para minha conexão. O segundo usa o conjunto de caracteres que especificamos explicitamente com CONVERT() , bem como o agrupamento padrão para esse 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 CONVERT(null, DATETIME); 

Resultado:
+-------------------------+| CONVERT(null, DATETIME) |+------------------------+| NULO |+-------------------------+

No entanto, passando null sem especificar o novo tipo de dados resulta em um erro de sintaxe:
SELECT CONVERT(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 CONVERT() sem passar um argumento resulta em um erro de sintaxe:
SELECT CONVERT(); 

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