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 comoCHARSET()
eCOLLATION()
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 comCONVERT()
, 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 converternull
retornanull
:
SELECT CONVERT(null, DATETIME);
Resultado:
+-------------------------+| CONVERT(null, DATETIME) |+------------------------+| NULO |+-------------------------+
No entanto, passandonull
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 1Argumento ausente
ChamandoCONVERT()
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