2010-07-19 72 views
0

任何人都可以帮助我了解MySQL如何不能读取我尝试执行此查询的行。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行预计,以满足最新的验证,但是当我执行查询,返回任何结果。任何人都可以帮助,如果有一个替代的查询来做到这一点。

+0

你确定'timein'和'timeout'都是'DATETIME'字段吗? – Anax 2010-07-19 06:59:01

+1

显示'DESCRIBE考勤'的输出# – Anax 2010-07-19 07:05:38

+0

我已经检查过的字段的类型,它被设置为日期时间类型 – Bryan 2010-07-19 08:15:14

回答

5

您的查询完好。它应该按预期工作:

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) 

你确定你的timeintimeout字段datetime类型或timestamp的?


UPDATE:@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,如上述将进行字符串比较而不是时间比较。

+0

我已经有一个表中的数据,并且想要捕获第2行作为结果,但它返回0结果.. – Bryan 2010-07-19 06:58:56

+0

@Zen:是的,这只是一个测试用例。它显示你的查询工作。我创建了一个新表,插入了与示例中相同的数据,并复制/粘贴了您的查询。它返回了预期结果(第2行) – 2010-07-19 07:02:53

+0

@Zen:你确定'timein'和'timeout'字段的类型是'datetime'或'timestamp'吗? – 2010-07-19 07:04:00

1

你想要做的事,如:

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

编辑:我尊重这里的专家,但这是我会怎么做。

+0

我尝试这一个,但仍然无法正常工作.. :( – Bryan 2010-07-19 06:58:06