действительно ли возможно сравнить МЕТКУ ВРЕМЕНИ mysql с миллисекундой?

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

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

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

[РЕДАКТИРОВАНИЕ] хорошо, если использование миллисекунд в mySql является обреченным на неудачу, что является лучшим способом сравнить даты, предполагая, что я начинаю в millis и нахожусь в Java.

5
задан Yevgeny Simkin 29 January 2010 в 23:55
поделиться

3 ответа

Да, работает точно так, как задокументировано.

. _ замены возвращает новый именной кортеж, он не изменяет оригинал, поэтому нужно написать следующее:

p = p._replace(x=33)

См. здесь: somenamedturple. _ замените (kwargs) для получения дополнительной информации.

-121--1184498-

Типичный метод, которым большинство людей научились обращаться с исключениями, уязвим для отсутствующих в ловушке исключений:

eval { some code here };
if( $@ ) {  handle exception here };

Можно сделать:

eval { some code here; 1 } or do { handle exception here };

Это защищает от пропуска исключения из-за того, что $ @ забит, но он все еще уязвим для потери значения $ @ .

Чтобы быть уверенным в отсутствии исключения, при проведении оценки необходимо локализовать $ @ ;

eval { local $@; some code here; 1 } or do { handle exception here };

Это все тонкая ломка, и профилактика требует большого количества эзотерического шаблона.

В большинстве случаев это не проблема. Но я был сожжен за исключением поедания деструкторов объектов в реальном коде. Отладка проблемы была ужасной.

Ситуация явно плохая. Посмотрите на все модули на CPAN, построенные обеспечивают достойную обработку исключений.

Ошеломляющие отклики в пользу Попробуйте:: Крошка в сочетании с тем, что Try:: Крошка не «слишком умна наполовину», убедили меня попробовать это. Такие вещи, как TryCatch и Исключение:: Класс:: TryCatch , Ошибка , вкл и вкл, слишком сложны для доверия. Попробуйте:: Крошка - это шаг в правильном направлении, но у меня все еще нет легкого класса исключений для использования.

-121--2537102-

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

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

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

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

6
ответ дан 18 December 2019 в 14:46
поделиться

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

в справедливости ради, MySQL действительно поставил способ сохранить миллионные и Микро секунды в десятичном поле десятичное (17,3) , и это также Запрос, как будто это был временной Но почему не возможно хранить в A DateTime или Timestamp поле?

3
ответ дан 18 December 2019 в 14:46
поделиться

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

3
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: