Как разобрать время ISO timestamp в mysql? - PullRequest
0 голосов
/ 04 мая 2020

Как можно правильно проанализировать метку времени ISO datetime String для столбца типа time в mysql? Я заметил следующее:

select CAST('2013-09-05T10:10:02' as time) from mytable limit 1

Результат неверный: 00:20:13

select CAST(CAST('2013-09-05T10:10:02' as datetime) as time) from mytable limit 1

Результат правильный: 10:10:02

Почему я должен сделать двойной CAST здесь, чтобы получить правильное время? И еще важнее: как время разбора выполняется свойство?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Поскольку у вас есть строка, которую вам необходимо сначала преобразовать в формат даты.

Если вы приведете ее вовремя, как показано ниже:

   select CAST('2014-09-05T10:10:02' as time)
    00:20:14
    select CAST('2015-09-05T10:10:02' as time)
    00:20:15


  select CAST('2013' as time) --below casting string as time
    00:20:13

Если внимательно следить за ее обработкой как строка и получая год как время.

Так что вам нужно сначала привести это время, потом время.

select CAST(CAST('2013-09-05T10:10:02' as datetime) as time)
1 голос
/ 04 мая 2020

Обычно, когда вы пытаетесь преобразовать что-то во время, которое выглядит как целое число, MySQL обрабатывает это как нечто в виде HHMMSS, поэтому ваш 2013-09-05T10:10:02 становится 00:20:13. Для правильного преобразования значение должно быть MySQL datetime, что вы можете сделать с помощью CAST или вы можете использовать STR_TO_DATE для преобразования строки даты в MySQL дату, затем TIME для извлечения временной части:

SELECT TIME(STR_TO_DATE('2013-09-05T10:10:02', '%Y-%m-%dT%H:%i:%s'))

Вывод:

10:10:02

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...