Можно ли сравнить mysql TIMESTAMP с миллисекундами? - PullRequest
5 голосов
/ 30 января 2010

По причинам, которые слишком запутанны, у меня есть представление миллисекунды определенного времени, и у меня есть база данных mysql, заполненная метками времени MySql, и мне любопытно, возможно ли просто сделать собственные сравнения в sql, такие как select * from myTable where time_stamp_column > 1264665600000; или что-то в этом роде.

Я провел несколько тестов, и результаты довольно странные. Он не жалуется, но возвращает строку, которая не соответствует критериям.

Заранее спасибо.

[EDIT] Хорошо, если использование миллисекунд в mySql не является началом, то как лучше всего сравнить даты, если предположить, что я начинаю в миллисекундах и нахожусь в java.

Ответы [ 4 ]

6 голосов
/ 30 января 2010

Вы не получаете точность в миллисекундах, но, судя по нулям в конце вашего примера, она вам может не понадобиться.

Используйте FROM_UNIXTIME для преобразования метки времени Unix в MySQL TIMESTAMP. Похоже, у вас есть миллисекунды с эпохи Unix, поэтому просто разделите их на 1000, чтобы преобразовать:

SELECT * FROM myTable WHERE time_stamp_column > FROM_UNIXTIME(1264665600000/1000);

Возможно, вам придется скорректировать проблемы с часовым поясом / DST, поскольку временные метки SQL являются весьма удручающим местным временем.

3 голосов
/ 30 января 2010

Нет, к сожалению, столбцы TIMESTAMP и DATETIME не хранят значения с точностью до миллисекунды. Обходной путь для этого - использовать столбец BIGINT и иметь временные метки с соответствующим количеством миллисекундных мест, т.е. 1264808431000. К сожалению, это означает, что любая логика сравнения в вашем приложении или в MySQL должна быть основана на BIGINT.

3 голосов
/ 30 января 2010

Видимо, это известная ошибка: Ошибка 8523 . См. Однажды отметку времени (миллисекунды) ...

Справедливости ради, MySQL действительно предоставил способ сохранить Милли и микросекунды в десятичном поле DECIMAL(17,3), и это тоже запрашиваемый, как если бы это была временная метка НО почему нельзя хранить в DATETIME или TIMESTAMP поле?

1 голос
/ 16 ноября 2010

Если вам нужна эта функция в MySQL, не стесняйтесь сообщить команде разработчиков MySQL, проголосовав за нее в официальном рабочем журнале MySQL:

http://forge.mysql.com/worklog/task.php?id=946

http://blogs.mysql.com/peterg/2009/08/07/fractional-seconds-precision-in-mysql-datetime-data-types/

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