Преобразование 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