Em uma das minhas tabelas do MySQL 5.7, tenho uma coluna que tem um formato de data e hora estranho. Parece com isso:
2024-08-09 20:57:31.4477
Estou tentando usar esta consulta para convertê-la para um formato de data m/d/Y. Aqui está o que estou tentando no momento:
update table set `column1` =
CASE column1
WHEN '' THEN NULL
ELSE date_format(str_to_date(`column1`, '%Y-%m-%d %H:%i:%s %P'), '%m/%d/%Y')
END;
Mas estou recebendo o erro abaixo:
Incorrect datetime value: '2024-08-09 20:57:31.4477' for function str_to_date
Ao tentar comparar a coluna datetime, também usei este formato: '%Y-%m-%d %H:%i:%s %p'
mas estou recebendo o mesmo erro.
Qual é o formato que devo usar em str_to_date para a data e hora acima?
Tentei usar estes formatos:
'%Y-%m-%d %H:%i:%s.%P'
'%Y-%m-%d %H:%i:%s.%p'
'%Y-%m-%d %H:%i:%s.%s'
Continuo recebendo o mesmo erro.
Os quatro dígitos finais na sequência de data de exemplo "2024-08-09 20:57:31.4477" são a parte fracionária dos segundos, ou seja, há 32,4477 segundos mencionados, ou então coloque 32 segundos e 447700 microssegundos. A maneira correta de indicar que você tem uma parte fracionária para o componente de segundos na sua sequência de entrada é
%f
.Observe que não há
%P
especificador, e o%p
especificador diz respeito a AM/PM. Veja a documentação do SQL 5.7 sobre funções de data e hora .Então use
'%Y-%m-%d %H:%i:%s.%f'
como string de formato para astr_to_date
função.Eu enfrentei os mesmos problemas antes devido ao comprimento de bit do campo datetime. Ao projetar a tabela, você deve minimizar o tamanho do valor do campo datetime. Se você não gosta de mudar o design da tabela, você pode tentar isso.