MySQL date_add () не работает в предложении WHERE? - PullRequest
3 голосов
/ 04 ноября 2010

Когда я пытаюсь выполнить следующий запрос:

... WHERE `date` = DATE_ADD(NOW(), INTERVAL 10 HOUR)

Это не работает, поэтому я должен использовать $date = date("Y-m-d", strtotime('+10 hours'))

Но почему date_add не работаетработа?

Большое спасибо

Ответы [ 4 ]

9 голосов
/ 04 ноября 2010

Обратите внимание, что функция DATE_ADD() возвращает часть времени в дополнение к дате. Это не то же самое, что использование php's date("Y-m-d", strtotime('+10 hours')), который возвращает только часть даты.

SELECT DATE_ADD(NOW(), INTERVAL 10 HOUR);
+-----------------------------------+
| DATE_ADD(NOW(), INTERVAL 10 HOUR) |
+-----------------------------------+
| 2010-11-05 01:59:51               |
+-----------------------------------+
1 row in set (0.00 sec)

Вы можете использовать WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR)) вместо:

SELECT DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR));
+-----------------------------------------+
| DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR)) |
+-----------------------------------------+
| 2010-11-05                              |
+-----------------------------------------+
1 row in set (0.02 sec)

Контрольный пример:

CREATE TABLE tbl (id int, date datetime);

INSERT INTO tbl VALUES (1, '2010-11-04');
INSERT INTO tbl VALUES (2, '2010-11-05');
INSERT INTO tbl VALUES (3, '2010-11-06');
INSERT INTO tbl VALUES (4, '2010-11-07');

SELECT * FROM tbl WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR));
+------+---------------------+
| id   | date                |
+------+---------------------+
|    2 | 2010-11-05 00:00:00 |
+------+---------------------+
1 row in set (0.00 sec)
3 голосов
/ 04 ноября 2010

NOW() - это отметка времени, а не дата.

Пример:

mysql> select now(), current_date();
+---------------------+----------------+
| now()               | current_Date() |
+---------------------+----------------+
| 2010-11-04 12:00:01 | 2010-11-04     |
+---------------------+----------------+

Я думаю, это то, что вы хотите:

... WHERE date = DATE_ADD(CURRENT_DATE(), INTERVAL 10 HOUR)
1 голос
/ 04 ноября 2010

Это:

WHERE date = DATE_ADD(NOW(), INTERVAL 10 HOUR)

... работает (при условии, что date - это DATETIME ), but it includes the time portion when the statement was executed -- the date` значения должны совпадать с тем, что точно должно быть возвращено.

1 голос
/ 04 ноября 2010

Вы сравниваете DateTime (результат DATE_ADD) с DATE. Вам нужно WHERE date = DATE(DATE_ADD(NOW(), INTERVAL 10 HOUR))

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