2010-07-19 5 views
0

Quelqu'un peut-il m'aider sur la façon dont MySQL ne peut pas lire une ligne de J'ai essayé d'exécuter cette requête.Date de validation en MySQL

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

C'est la date dans le tableau:

+-----------------------+-----------------------+ 
| 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 | 
+-----------------------+-----------------------+ 

comme on peut le voir sur la table, la ligne 2 devrait répondre à la validation de la date, mais quand j'exécute la requête, il renvoie aucun résultat . Quelqu'un peut-il aider s'il y avait d'autres requêtes pour le faire.

+0

Êtes-vous sûr que 'timein' et' timeout' sont les deux champs 'DATETIME'? – Anax

+1

Afficher la sortie de 'DÉCRIVE présence' – Anax

+0

J'ai vérifié les types de champs et il est défini comme type de date-heure – Bryan

Répondre

5

Votre requête est correcte. Il devrait fonctionner comme prévu:

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) 

Etes-vous sûr que vos timein et timeout champs sont de type datetime ou timestamp?


MISE À JOUR: Suite à @Psytronic's suggestion les commentaires ci-dessous, votre exemple serait même travailler si vos champs étaient de type 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) 

Cependant vos champs ne doivent pas être varchar, comme ci-dessus ferait une comparaison de chaîne au lieu d'une comparaison de temps.

+0

J'ai déjà une donnée dans une table et je veux en attraper une ligne 2 en résultat mais elle renvoie 0 résultat. – Bryan

+0

@Zen: Oui, c'est juste un cas de test. Cela montre que votre requête fonctionne. J'ai créé une nouvelle table, inséré les mêmes données que dans votre exemple, et copié/collé votre requête. Il a renvoyé le résultat attendu (ligne 2) –

+0

@Zen: Etes-vous sûr que vos champs 'timein' et' timeout' sont de type 'datetime' ou' timestamp'? –

1

Vous aurez envie de faire quelque chose comme:

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

EDIT: Je remets aux experts ici, mais voici comment je le ferais.

+0

J'essaie celui-ci mais je ne travaille toujours pas .. :( – Bryan