запрос с использованием subtime () неожиданно не возвращает строк - PullRequest
0 голосов
/ 01 августа 2011

Я использую следующий запрос:

 SELECT message,timestamp 
 FROM botlogs.tbllogs
 WHERE message like '%Failed to grab car amount 
       or 0 website%' and timestamp > Subtime('2011-08-01 13:20','0:60')

Хотя у меня есть строка на 01.08.2011 13:21:53, приведенный выше запрос не возвращает никаких строк.Почему это так?

Если я запускаю

select timestamp,message 
from botlogs.tbllogs 
where message like Failed to grab car amount 
       or 0 website%' and timestamp < '2011-08-01 13:20' - INTERVAL 180 SECOND

, возвращается ошибка 7/31/2011 9:27:24 pm.

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

Потому что:

mysql> SELECT Subtime('2011-08-01 13:20','0:60');
+------------------------------------+
| Subtime('2011-08-01 13:20','0:60') |
+------------------------------------+
| NULL                               |
+------------------------------------+
1 row in set, 1 warning (0.04 sec)

Попробуйте вместо этого

mysql> SELECT Subtime('2011-08-01 13:20','00:01:00');
+----------------------------------------+
| Subtime('2011-08-01 13:20','00:01:00') |
+----------------------------------------+
| 2011-08-01 13:19:00                    |
+----------------------------------------+
1 row in set (0.00 sec)

Или

mysql> SELECT '2011-08-01 13:20' - INTERVAL 60 SECOND;
+-----------------------------------------+
| '2011-08-01 13:20' - INTERVAL 60 SECOND |
+-----------------------------------------+
| 2011-08-01 13:19:00                     |
+-----------------------------------------+
1 row in set (0.01 sec)
1 голос
/ 11 мая 2012

Из документов ,

  • SUBTIME (expr1, expr2)

SUBTIME () возвращает значение expr1 - expr2, выраженное в том же значении отформатировать как expr1. expr1 - выражение времени или даты и времени, а expr2 - выражение времени.

(акцент мой)

Проблема в том, что 0:60 не является допустимым выражением времени:

mysql> select time('0:60');
+--------------+
| time('0:60') |
+--------------+
| NULL         |
+--------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '0:60' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

и вычитание возвращает NULL:

mysql> select subtime(now(), '0:60');
+------------------------+
| subtime(now(), '0:60') |
+------------------------+
| NULL                   |
+------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect time value: '0:60' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

NULL s заставляет ваше сравнение возвращать false для каждой возможности, что приводит к 0 строкам в конечном результате.

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