MySQL中的日期验证

MySQL中的日期验证,mysql,validation,datetime,Mysql,Validation,Datetime,有谁能帮我解释一下MySQL是如何无法读取我试图执行的查询中的一行数据的 SELECT * FROM attendance where '2010-07-13 00:06:00' BETWEEN timein AND timeout; 这是表中的日期: +-----------------------+-----------------------+ | timein | timeout | ----------------------

有谁能帮我解释一下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行应该满足日期验证,但是当我执行查询时,它不会返回任何结果。如果有其他的查询方法,谁能帮上忙。

您的查询没有问题。它应按预期工作:

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


更新:进一步建议下面的注释,如果您的字段是
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
,因为上面所做的是字符串比较,而不是时间比较。

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

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


更新:进一步建议下面的注释,如果您的字段是
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
,因为上面所做的是字符串比较,而不是时间比较。

您需要执行以下操作:

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

从考勤中选择*,其中timein>='2010-07-13 00:06:00'和timeout您需要执行以下操作:

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


SELECT*FROM attention where timein>='2010-07-13 00:06:00'和timeout我已经在一个表中有了一个数据,希望捕获第2行作为结果,但它返回0结果。@Zen:是的,这只是一个测试用例。这表明您的查询是有效的。我创建了一个新表,插入了与示例中相同的数据,并复制/粘贴了查询。它返回了预期的结果(第2行)@Zen:你确定你的
timein
timeout
字段的类型是
datetime
timestamp
?我知道这会有一些巨大的开销,虽然只是暂时的,但你能将timein和timeout转换为日期吗,看看这是否有区别?如果是这样,那么很可能这两列不是日期时间字段。@Psytronic:很有趣。它也可以工作,但我想它不可靠,因为它应该进行字符串比较<代码>编辑
:或者,既然我重新阅读了您的注释,您是否打算测试其他内容:)?我在表中已有一个数据,希望捕获第2行作为结果,但它返回0结果。@Zen:是的,这只是一个测试用例。这表明您的查询是有效的。我创建了一个新表,插入了与示例中相同的数据,并复制/粘贴了查询。它返回了预期的结果(第2行)@Zen:你确定你的
timein
timeout
字段的类型是
datetime
timestamp
?我知道这会有一些巨大的开销,虽然只是暂时的,但你能将timein和timeout转换为日期吗,看看这是否有区别?如果是这样,那么很可能这两列不是日期时间字段。@Psytronic:很有趣。它也可以工作,但我想它不可靠,因为它应该进行字符串比较<代码>编辑
:或者我重新阅读了您的评论,您是否打算测试其他内容:)?您确定
timein
timeout
都是
日期时间
字段?显示
描述考勤
的输出我已检查了does字段的类型,并将其设置为DATETIME类型OHH。。恼人的数据库执行,它现在获取了一个结果。。我不知道它是怎么来的..你确定
timein
timeout
都是
DATETIME
字段吗?显示
descripe attention
的输出我检查了DOS字段的类型,并将其设置为DATETIME类型OHH。。恼人的数据库执行,它现在获取了一个结果。。我不知道它是怎么来的。。