Проверка даты в MySQL - PullRequest
       2

Проверка даты в MySQL

0 голосов
/ 19 июля 2010

Может кто-нибудь помочь мне с тем, как MySQL не может прочитать строки, которые я пытался выполнить этот запрос.

SELECT * FROM attendance where '2010-07-13 00:06:00' BETWEEN timein AND timeout;

Это дата в таблице:

+-----------------------+-----------------------+
|  timein               |  timeout              |
------------------------+------------------------
|  2010-07-13 23:44:11  |  2010-07-14 08:01:14  |
|  2010-07-12 23:40:56  |  2010-07-13 08:00:52  |   
|  2010-07-10 05:49:32  |  2010-07-10 14:00:45  |
+-----------------------+-----------------------+

Как видно из таблицы, ожидается, что строка 2 будет соответствовать дате проверки, но когда я выполняю запрос, он не возвращает результата. Может ли кто-нибудь помочь, если есть альтернативные запросы, чтобы сделать это.

Ответы [ 2 ]

5 голосов
/ 19 июля 2010

Ваш запрос в порядке.Он должен работать как положено:

CREATE TABLE attendance (id int, timein datetime, timeout datetime);

INSERT INTO attendance VALUES (1, '2010-07-13 23:44:11', '2010-07-14 08:01:14');
INSERT INTO attendance VALUES (2, '2010-07-12 23:40:56', '2010-07-13 08:00:52');
INSERT INTO attendance VALUES (3, '2010-07-10 05:49:32',' 2010-07-10 14:00:45');

SELECT * FROM attendance where '2010-07-13 00:06:00' BETWEEN timein AND timeout;
+------+---------------------+---------------------+
| id   | timein              | timeout             |
+------+---------------------+---------------------+
|    2 | 2010-07-12 23:40:56 | 2010-07-13 08:00:52 |
+------+---------------------+---------------------+
1 row in set (0.01 sec)

Вы уверены, что поля timein и timeout имеют тип datetime или timestamp?


ОБНОВЛЕНИЕ: В дополнение к @ Psytronic's , предлагающим комментарии ниже, ваш пример будет работать даже, если ваши поля имеют тип varchar:

CREATE TABLE attendance (id int, timein varchar(100), timeout varchar(100));

INSERT INTO attendance VALUES (1, '2010-07-13 23:44:11', '2010-07-14 08:01:14');
INSERT INTO attendance VALUES (2, '2010-07-12 23:40:56', '2010-07-13 08:00:52');
INSERT INTO attendance VALUES (3, '2010-07-10 05:49:32',' 2010-07-10 14:00:45');

SELECT * FROM attendance where '2010-07-13 00:06:00' BETWEEN timein AND timeout;
+------+---------------------+---------------------+
| id   | timein              | timeout             |
+------+---------------------+---------------------+
|    2 | 2010-07-12 23:40:56 | 2010-07-13 08:00:52 |
+------+---------------------+---------------------+
1 row in set (0.00 sec)

Однако ваши поля не должныбыть varchar, так как выше было бы сравнение строк вместо сравнения времени.

1 голос
/ 19 июля 2010

Вы захотите сделать что-то вроде:

SELECT * FROM attendance where timein >= '2010-07-13 00:06:00' and timeout <= '2010-07-13 17:00:00';

РЕДАКТИРОВАТЬ: Я полагаюсь на экспертов здесь, но это, как я бы это сделал.

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