2010-07-19 74 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