Почему оператор минус дает другой результат, чем функция TIMESTAMPDIFF () в mysql? - PullRequest
3 голосов
/ 02 апреля 2010

Поскольку TIMESTAMP в mysql хранится в виде 32-битного значения, представляющего интервал времени с 1970-января-1 0:00:00 в секундах, я предположил, что использование оператора минус (-) для значений TIMESTAMP даст разницу этих значений в секундах На самом деле нет:

+---------------------------------------------------------------------+
| TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:29:59") |
+---------------------------------------------------------------------+
| 41.000000                                                           |
+---------------------------------------------------------------------+
1 row in set (0.05 sec)

mysql> select timestampdiff(SECOND,TIMESTAMP("2010-04-02 10:30:00"),TIMESTAMP("2010-04-02 10:29:59"));
+-----------------------------------------------------------------------------------------+
| timestampdiff(SECOND,TIMESTAMP("2010-04-02 10:30:00"),TIMESTAMP("2010-04-02 10:29:59")) |
+-----------------------------------------------------------------------------------------+
| -1                                                                                      |
+-----------------------------------------------------------------------------------------+

mysql> select TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:30:01") ;
+---------------------------------------------------------------------+
| TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:30:01") |
+---------------------------------------------------------------------+
| -1.000000                                                           |
+---------------------------------------------------------------------+

+---------------------------------------------------------------------+
| TIMESTAMP("2010-04-02 10:30:00") - TIMESTAMP("2010-04-02 10:31:00") |
+---------------------------------------------------------------------+
| -100.000000                                                         |
+---------------------------------------------------------------------+

Кажется, что разница в одну минуту равна 100 вместо 60.

Почему это?

Ответы [ 2 ]

2 голосов
/ 02 апреля 2010

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

20100402103000 - 20100402103100 = -100

20100402103000 - 20100402103001 = -1

20100402103000 - 20100402102959 = 41

В другом случае преобразование выполняется правильно.

0 голосов
/ 02 апреля 2010

Правильная функция для использования UNIX_TIMESTAMP().

TIMESTAMP() возвращает дату (время) в формате '2003-12-31 00:00:00'.

Кроме того, нет ничего плохого в использовании

SELECT TIMESTAMPDIFF(SECOND,NOW(),TIMESTAMP("2010-04-02 19:29:59"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...