J'ai eu des résultats bizarres de questions que j'ai testé avec la fonction DATE
, culminant dans ces petites beautés:Quel est le problème avec la fonction MySQL DATE()?
mysql> SELECT id FROM job WHERE DATE(due)=CURRENT_DATE;
Empty set (0.00 sec)
mysql> SELECT id FROM job WHERE DATE(due)=CURRENT_DATE AND id>2022;
Empty set (0.00 sec)
mysql> SELECT id FROM job WHERE DATE(due)=CURRENT_DATE AND id=2023;
+------+
| id |
+------+
| 2023 |
+------+
et pour un peu plus de comédie
mysql> SELECT id, DATE(due) FROM job WHERE DATE(due) IS NULL AND id>2022;
nous donne :
+------+------------+
| id | DATE(due) |
+------+------------+
| 2023 | 2009-08-24 |
| 2024 | 2009-08-24 |
| 2025 | NULL |
| 2026 | 2009-08-24 |
| 2027 | NULL |
| 2032 | NULL |
| 2031 | NULL |
| 2033 | NULL |
| 2034 | NULL |
| 2035 | NULL |
| 2036 | NULL |
| 2037 | NULL |
| 2038 | NULL |
+------+------------+
est sur ce 5.0.45
La fonction DATE()
est-elle complètement non fiable ou manque-t-il quelque chose?
Clarifications:
Le champ due est de type datetime
, et il n'y a pas eu de renversement de date dans l'intervalle entre les requêtes - toutes les requêtes mentionnées ci-dessus donnent toujours les mêmes résultats et NOW()
est actuellement 2009-08-24 22:54:17
En réponse à la requête de Eric:
mysql> SELECT id, due, DATE(due) FROM job WHERE id>2022;
+------+---------------------+------------+
| id | due | DATE(due) |
+------+---------------------+------------+
| 2023 | 2009-08-24 00:00:00 | 2009-08-24 |
| 2024 | 2009-08-24 17:20:56 | 2009-08-24 |
| 2025 | NULL | NULL |
| 2026 | 2009-08-24 17:22:07 | 2009-08-24 |
| 2027 | NULL | NULL |
| 2032 | NULL | NULL |
| 2031 | NULL | NULL |
| 2033 | NULL | NULL |
| 2034 | NULL | NULL |
| 2035 | NULL | NULL |
| 2036 | NULL | NULL |
| 2037 | NULL | NULL |
| 2038 | NULL | NULL |
+------+---------------------+------------+
lol! (ou sanglot?) – Sklivvz
Une question peut-être stupide: si vous l'essayez maintenant, cela vous donne-t-il les mêmes résultats? Peut-être que cette date a changé entre vos requêtes? – Quassnoi
Quel est le type d'identifiant de colonne? est-ce un champ auto-increment/serial de type integer ou autre chose? – Parthan