Как сравнить миллисекунды в MySQL с заданной датой - PullRequest
2 голосов
/ 28 февраля 2012

Использование

mysql  Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0

У меня есть таблица, определенная следующим образом:

+-----------------------+--------------+------+-----+---------+-------+
| Field                 | Type         | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| id                    | bigint(20)   | NO   | PRI |         |       | 
| user_id               | bigint(20)   | NO   | MUL |         |       | 
| directory_id          | bigint(20)   | NO   | MUL |         |       | 
| attribute_name        | varchar(255) | NO   |     |         |       | 
| attribute_value       | varchar(255) | YES  |     | NULL    |       | 
| attribute_lower_value | varchar(255) | YES  |     | NULL    |       | 
+-----------------------+--------------+------+-----+---------+-------+

При выборе значения attribute_value для моего последнего аутентифицированного времени возвращается

+-------------------+-----------------+
| attribute_name    | attribute_value |
+-------------------+-----------------+
| lastAuthenticated | 1330380013284   | 
+-------------------+-----------------+

Если япроверьте значение, используя http://www.epochconverter.com/, там написано

Assuming that this timestamp is in milliseconds:
GMT: Mon, 27 Feb 2012 22:00:13 GMT

Но если я попробую следующую строку кода

mysql> select from_unixtime('1330380013284');
+--------------------------------+
| from_unixtime('1330380013284') |
+--------------------------------+
| NULL                           | 
+--------------------------------+

Кто-нибудь, кто сразу знает, что я здесь упускаю?

Ответы [ 2 ]

6 голосов
/ 28 февраля 2012

Вам нужно разделить на 1000, а также удалить кавычки, в противном случае ваши даты истекут

SELECT FROM_UNIXTIME(theField/1000);

SELECT FROM_UNIXTIME(1330380013284/1000);

См. Документацию - обратите внимание, что методы MySQL возвращают SECONDS, а не миллисекунды, которые вы используете:

Документы MySQL для UNIX_TIMESTAMP

If called with no argument, returns a Unix timestamp 
(SECONDS since '1970-01-01 00:00:00' UTC) as an unsigned integer
0 голосов
/ 28 февраля 2012

Снимите ', вам нужно передать число.

...