Tengo problemas para convertir las cadenas con DateTime
información en formato AM / PM.
Obtengo el mismo resultado para las 12:10 a.m. y las 12:10 p.m., aunque deberían ser diferentes.
Aparte de 12: xx: xx AM funciona bien.
¿Estoy haciendo algo mal aquí?
select
parseDateTimeBestEffort('2020-01-01 12:10:00 AM'),
parseDateTimeBestEffort('2020-01-01 12:10:00 PM')
Resultado:
2020-01-01 12:10:00
2020-01-01 12:10:00
Desafortunadamente, es la especificidad de la implementación actual. Revisemos el código fuente:
AM / PM - AM se ignora y PM significa: agregue 12 horas si el valor es menor que 12.
(ver parseDateTimeBestEffort.cpp )
Creé el error # 18402 parseDateTimeBestEffort no debe ignorar la abreviatura de AM para la hora 12 .
Como solución alternativa, sugeriría de esta manera:
SELECT
str,
parseDateTimeBestEffort(str) AS dt,
if((toHour(dt) = 12) AND (str ILIKE '% am'), subtractHours(dt, 12), dt) AS fixed_dt
FROM
(
SELECT '2020-02-01 12:10:00 AM' AS str
UNION ALL
SELECT '2020-02-01 12:10:00 am'
UNION ALL
SELECT '2020-02-01 12:10:00 Am'
UNION ALL
SELECT '2020-02-01 12:10:00 aM'
UNION ALL
SELECT '2020-02-01 12:10:00 PM'
)
ORDER BY fixed_dt
/*
┌─str────────────────────┬──────────────────dt─┬────────────fixed_dt─┐
│ 2020-02-01 12:10:00 AM │ 2020-02-01 12:10:00 │ 2020-02-01 00:10:00 │
│ 2020-02-01 12:10:00 am │ 2020-02-01 12:10:00 │ 2020-02-01 00:10:00 │
│ 2020-02-01 12:10:00 Am │ 2020-02-01 12:10:00 │ 2020-02-01 00:10:00 │
│ 2020-02-01 12:10:00 aM │ 2020-02-01 12:10:00 │ 2020-02-01 00:10:00 │
│ 2020-02-01 12:10:00 PM │ 2020-02-01 12:10:00 │ 2020-02-01 12:10:00 │
└────────────────────────┴─────────────────────┴─────────────────────┘
*/
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras