Convertendo strings de data no MySQL utilizando STR_TO_DATE
Neste artigo vamos ver como trabalhar com a função STR_TO_DATE do MySQL para converter string em datas no formato aaaa-mm-dd
A string que vamos usar para conversão será esta:
"1965 Mar 18 0834"
Para converter esta string numa data no formato aaaa-mm-dd, a função STR_TO_DATE() precisa receber dois parâmetros. O primeiro parâmetro é esta string contendo uma informação que representa uma data, o segundo parâmetro é o formato como os componentes da data estão organizados na string informada. Nossa consulta ficará da seguinte forma:
SELECT STR_TO_DATE("1965 Mar 18 0834", "%Y %b %d %H%i") as data
E o resultado gerado foi:
1965-03-18 08:34:00
Vamos entender o segundo parâmetro. Nele foi informado o seguinte:
%Y %b %d %H%i
Este é o formato da data em nosso campo string. Seu significado é:
%Y - Ano
%b - Mês abreviado
%d - Dia
%H - Hora
%i - Minutos
Se a nossa string de data tivesse um formato diferente, seria necessário ajustar o segundo parâmetro. Vamos ver um segundo exemplo:
"1965 March 18 0834"
Este exemplo tem uma pequena diferença em relação ao anterior\'. O mês não está abreviado.
Para converter, nossa consulta ficaria da seguinte forma:
SELECT STR_TO_DATE("1965 March 18 0834", "%Y %M %d %H%i") as data
Qual a diferença em relação a conversão anterior? No primeiro exemplo o mês era abreviado, então utilizamos na máscara do formato o parâmetro %b. Como o mês não está mais abreviado, ele foi substituído por %M
Para um melhor aproveitamento, precisamos conhecer quais os formatos que podem ser combinados para corresponder à nossa string de data. As opções disponíveis são os seguintes:
%Y - Ano com quatro dígitos (ex: 2024)
%y - Ano com dois dígitos (ex: 24)
%M - Nome completo do mês (ex: Janeiro)
%b - Nome abreviado do mês (ex: Jan)
%m - Mês como número (01 a 12)
%d - Dia do mês como número (01 a 31)
%H - Hora em formato 24 horas (00 a 23)
%h - Hora em formato 12 horas (01 a 12)
%i - Minutos (00 a 59)
%s - Segundos (00 a 59)
%p - AM ou PM
%W - Nome completo do dia da semana (ex: Segunda-feira)
%a - Nome abreviado do dia da semana (ex: Seg)
%u - Número da semana do ano (01 a 53)
Vamos ver outros exemplos de conversão de string de datas, fazendo alterações no formato da data original.
SELECT STR_TO_DATE("18 mar 1965 0834", "%d %b %Y %H%i") as data
SELECT STR_TO_DATE("18, 03, 1965", "%d, %m, %Y") as data
SELECT STR_TO_DATE("1965, 03, 18", "%Y, %m, %d") as data
SELECT STR_TO_DATE("1965 03 18 0834", "%Y %m %d %H%i") as data