Dans une instruction SQL, comment comparer une date enregistrée sous le nom TIMESTAMP à une date au format AAAA-MM-JJ?
Ex .: SELECT * FROM table WHERE timestamp = '2012-05-05'
Je veux que cette requête retourne toutes les lignes ayant un horodatage le jour spécifié, mais ne renvoie que les lignes ayant un horodatage de minuit.
merci
Vous pouvez utiliser la fonction DATE()
pour extraire la partie date de l'horodatage:
SELECT * FROM table
WHERE DATE(timestamp) = '2012-05-05'
Cependant, si vous avez un index sur la colonne timestamp, ce serait plus rapide car il pourrait utiliser l'index:
SELECT * FROM table
WHERE timestamp BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
WHERE cast(timestamp as date) = '2012-05-05'
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00'
AND timestamp <= '2012-05-05 23:59:59'
Comme suggéré par certains, en utilisant DATE(timestamp)
, vous appliquez une manipulation à la colonne et vous ne pouvez donc pas vous fier à l'ordre des index.
Cependant, utiliser BETWEEN
ne serait fiable que si vous incluez les millisecondes. Dans l'exemple d'horodatage BETWEEN '2012-05-05 00:00:00' AND '2012-05-05 23:59:59'
vous excluez les enregistrements dont l’horodatage est compris entre 2012-05-05 23:59:59.001
et 2012-05-05 23:59:59.999
. Cependant, même cette méthode pose quelques problèmes en raison de la précision des types de données. De temps en temps, 999 millisecondes sont arrondies.
La meilleure chose à faire est de:
SELECT * FROM table
WHERE date>='2012-05-05' AND date<'2012-05-06'
Utilisez une fonction de conversion de MYSQL:
SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05'
Cela devrait marcher
Si vous utilisez des paramètres SQL pour exécuter la requête, cela serait utile.
SELECT * FROM table WHERE timestamp between concat(date(?), ' ', '00:00:00') and concat(date(?), ' ', '23:59:59')
Utilisation
SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05'
Quand j'ai lu votre question, je pensais que vous étiez sur Oracle DB jusqu'à ce que je voie l'étiquette "MySQL". Quoi qu'il en soit, pour les personnes travaillant avec Oracle, voici le chemin:
SELECT *
FROM table
where timestamp = to_timestamp('21.08.2017 09:31:57', 'dd-mm-yyyy hh24:mi:ss');