Преобразование float день года в datetime mysql
у меня есть следующая таблица в MySQL DB:
year | day_of_year
2012 | 283.813090
как преобразовать эти поля в DateTime
?
пробовал:
SELECT MAKEDATE(year, day_of_year) from tableName;
возвращает Date
(yyyy-mm-dd
)... Как я могу получить Time
(чч:мм:СС)?
кто-нибудь может помочь мне решить эту проблему?
2 ответов
при использовании в MySQL SEC_TO_TIME()
функции (и немного математики), вы сможете получить свою метку.
математика будет заключаться в умножении вашего day_of_year
столбец по количеству секунд в день, 86400, а затем mod-результат на 86400, давая вам уравнение ((day_of_year * 86400) % 86400)
:
SELECT SEC_TO_TIME((day_of_year * 86400) % 86400) AS time;
если я запускаю это со значением 283.813090
, это дает мне правильное время суток*:
mysql> SELECT SEC_TO_TIME((283.813090 * 86400) % 86400) AS time;
+----------+
| time |
+----------+
| 19:30:51 |
+----------+
чтобы объединить это с фактической датой, вы можете либо выберите их в двух отдельных столбцах, либо используйте CONCAT()
чтобы получить реальную "метку времени":
SELECT
CONCAT(MAKEDATE(year, day_of_year), ' ', SEC_TO_TIME((day_of_year * 86400) % 86400)) AS timestamp
FROM tableName;
* математика расчета времени суток довольно проста. Для 283.813090
, это говорит о том, что есть 283 дня. Для расчета времени, мы используем дробную часть и умножить на 24 (часов). .813090 * 24 = 19.51416
. Это говорит, что есть 19 часов, чтобы вычислить минут, мы берем дробную часть и умножить на 60. .51416 * 60 = 30.8496
, который говорит 30 протокол. Для секунд, опять же, возьмите дробную часть и умножьте на 60:.8496 * 60 = 50.976
. Итак, всего у нас 19 часов, 30 минут и 50 секунд (с .976 миллисекунд, которые округляются) - 19: 30:51, или 7: 30pm.
вот запрос, который я придумал:
SELECT TIMESTAMP(
MAKEDATE(year, day_of_year),
SEC_TO_TIME((1 - (round(day_of_year) - day_of_year)) * 24 * 60 * 60))
FROM tableName;
что это?
1 - (round(day_of_year) - day_of_year)
=> получение дробной части ( .813090)24 * 60 * 60
=> всего секунд в 1 день = 24 часа * 60 минут * 60 секунд
тестирование
вы можете играть с запросом, используя скрипку SQL здесь:http://sqlfiddle.com#!2 / f62619/21
результаты
это результаты с двумя образцами, которые вы предоставили в вопросе:
October, 10 2012 19:30:51+0000
October, 10 2012 20:15:23+0000
ссылки
это хорошие ресурсы, которые помогли мне построить запрос:
12.7. Функции даты и времени
как добавить значения даты или времени в MySQL