web-dev-qa-db-fra.com

Comment comparer les dates d'horodatage avec le paramètre de date uniquement dans MySQL?

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

70
Michael

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'
116
Marcus Adams
 WHERE cast(timestamp as date) = '2012-05-05'
6
juergen d
SELECT * FROM table WHERE timestamp >= '2012-05-05 00:00:00' 
    AND timestamp <= '2012-05-05 23:59:59'
5
Cfreak

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'
4
Tom Kitson

Utilisez une fonction de conversion de MYSQL:

SELECT * FROM table WHERE DATE(timestamp) = '2012-05-05' 

Cela devrait marcher

2
adrien

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')
0
devesh

Utilisation

SELECT * FROM table WHERE DATE(2012-05-05 00:00:00) = '2012-05-05' 
0
Muhammad Fahad

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');
0
KeyMaker00