2015-02-01 2 views
0

У меня есть ряд дат, которые хранятся как двойные 778867200000, и теперь мне нужно их преобразовать в datetime. Я не хочу пытаться преобразовать их в одну строку, если это не так. Поэтому я добавил новую строку, а значение по умолчанию - NULL.Mysql double to datetime

Я пробовал несколько комбинаций для достижения того, что я ищу, но не повезло.

Вот тип вещи, я пытался ...

UPDATE daily_quotes t, (SELECT DISTINCT id, date 
        FROM daily_quotes 
        WHERE id BETWEEN 1 AND 5) t1 
SET t.unix_date = CONVERT(t1.date, DATETIME) 
WHERE t.id = t1.id 

Может кто-нибудь предложить решение?

Благодаря

Стив

PS: Я просто ограничивая его 1-5 для целей тестирования. У меня на самом деле более 300 тыс. Записей.

+0

ли эти даты хранятся в виде микросекунд начиная с 1 января 1970 года? – Schwern

+0

@Schwern. Я считаю, что это было бы миллисекундами с 1970 года из-за 3 дополнительных цифр, но из двух примеров не использовались ни секунды, ни миллисекунды. – Devon

ответ

1

Предполагая, что ваш двойник должен быть в эпоху Unix, вы захотите использовать функцию MySQL FROM_UNIXTIME().

SET t.unix_date = FROM_UNIXTIME(t1.date) 

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

SUBSTRING(t1.date, 1, length(t1.date) - 3) 

эквивалентно:

FLOOR(t1.date/1000) 

Вы можете также:

ROUND(t1.date/1000) 

Округление может быть необходимо, если FROM_UNIXTIME не поддерживает дроби.

Так все вместе:

SET t.unix_date = FROM_UNIXTIME(SUBSTRING(t1.date, 1, length(t1.date) - 3)) 
+0

Это одна из многих вещей, которые я пробовал, но она не работает в этом случае. – SteveF

+0

Является ли '778867200000' фактическим числом из базы данных? Дайте мне пример фактического числа и даты, которую он должен представлять. – Devon

+0

Да, это фактическое число из базы данных. Вот еще один, 1419264000000, который 22 декабря 2014 года. – SteveF