MySQL: странный результат при вычитании значения Date и NOW () - PullRequest
0 голосов
/ 23 августа 2010

Я просто попытался вставить две строки с текущей датой и временем, а затем вычислил прошедшее время с этой даты. Вот строки из моей таблицы после двух вставок и использования функции NOW () для установки метки времени:

mysql> select * from pendingActivations;
+--------+------------+---------------------+
| userId | code       | timestamp           |
+--------+------------+---------------------+
|      2 | aaa        | 2010-08-23 17:04:02 |
|   2345 | alkfjkla23 | 2010-08-23 16:59:53 |
+--------+------------+---------------------+

Через несколько минут после вставки строки с userId, равным 2, я выполнил следующую команду, которая, как я надеялся, даст мне истекшее время из отметки времени для каждой строки. Вот результаты:

mysql> select userId, code, timestamp, NOW() - timestamp as elapsedSeconds from pendingActivations;
+--------+------------+---------------------+----------------+
| userId | code       | timestamp           | elapsedSeconds |
+--------+------------+---------------------+----------------+
|      2 | aaa        | 2010-08-23 17:04:02 |     136.000000 |
|   2345 | alkfjkla23 | 2010-08-23 16:59:53 |    4585.000000 |
+--------+------------+---------------------+----------------+

Интересно, как во втором ряду было такое огромное значение elapsedSeconds, которое указывает, что прошло ровно 1 час, 16 минут и 25 секунд, хотя легко увидеть, что с тех пор прошло всего около 5 минут.

Вот структура таблицы:

mysql> describe pendingActivations;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| userId    | int(11)     | NO   | PRI | NULL    |       | 
| code      | varchar(32) | NO   | UNI | NULL    |       | 
| timestamp | datetime    | NO   |     | NULL    |       | 
+-----------+-------------+------+-----+---------+-------+

Есть идеи и / или объяснения?

1 Ответ

3 голосов
/ 23 августа 2010

Я не могу объяснить проблему, но я подозреваю, что операция - возвращает результат в неожиданном формате (возможно, включая микросекунды или десятые доли?)1006 *.

возвращает expr1 - expr2 в виде значения времени.expr1 и expr2 являются выражениями времени или даты и времени, но оба должны быть одного типа.

...