Estoy tratando de convertir una columna de fecha de tipo cadena a tipo de fecha.
Uso la siguiente consulta en AWS Athena:
SELECT col0, col1, col2, date_parse(replace(col3, '/', '-'), '%m-%d-%Y') AS start_date FROM "bucket"."table" WHERE col3 <> '' Esto funciona para algunos registros porque algunas fechas tienen este formato: 12/08/2019 Pero falla para otras fechas que tienen este formato: 7/1/2019 0:06 Algunas otras fechas tienen el formato: 2020/04/10 08:39
Estas fechas de diferentes formatos existen en la misma columna. Tratando con datos sucios aquí... Entiendo por qué mi consulta falla porque solo tengo el formato '%m-%d-%Y' allí. Solo me preguntaba cómo manejaría algo como esto para que pueda manejar los 3 formatos en una consulta.
Puede ejecutar las diversas combinaciones de esta manera usando una combinación de Coalesce y try .
Los diversos formatos de fecha y hora están disponibles en esta página de documentación de presto .
SELECT col0, col1, col2, Coalesce( try(date_parse(col3, '%m/%d/%Y')), try(date_parse(col3, '%Y/%m/%d %H:%i')), try(date_parse(col3, '%e/%c/%Y %k:%i')) ) AS start_date FROM "bucket"."table" WHERE col3 <> ''Mi instinto es usar CASE WHEN col3 LIKE ..., recortar los tiempos para los sabores cronometrados, llamar a la fecha analizar una vez con el segundo formato de argumento correcto. Además, si encuentra más excepciones, puede CUANDO más expresiones LIKE.