Datetime égal ou supérieur à aujourd'hui dans MySQL


175

Quelle est la meilleure façon de faire ce qui suit:

SELECT * FROM users WHERE created >= today;

Remarque: créé est un champ datetime.

Réponses:


329
SELECT * FROM users WHERE created >= CURDATE();

Mais je pense que tu veux dire created < today


11
CURDATE()retour seulement date pas heure
Shakti Singh

20
@ n00b comment avez-vous des utilisateurs qui seront créés dans le futur ..? intéressant =) J'utilisais ceci pour voir si un message était encore expiré.
Garet Claborn

75
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

En savoir plus: http://www.tomjepson.co.uk/tutorials/36/mysql-select-where-date-today.html


6
Il me manque peut-être quelque chose, mais avec les types DATETIME, la solution CURDATE () ne fonctionne pas. Cela fait.
Jahmic

De plus, cela prend beaucoup de temps car il y a une surcharge de conversion de DATETIME en date via la fonction DATE (), puis de comparaison avec la condition where.
roopunk

N'utilisez pas de fonctions sur les colonnes, cela oblige la requête à ignorer l'index, ce qui entraîne des requêtes lentes. Vérifiez ma réponse pour une approche alternative stackoverflow.com/a/42365426/4311336
Bsienn

33
SELECT * FROM users WHERE created >= NOW();

si la colonne est de type datetime.


1
je veux dire aujourd'hui pas maintenant: ai-je besoin aujourd'hui comme 03/03/2011 pas 03/03/2011 14:02:02
n00b

@ n00b: il retournera des lignes plus grandes qu'aujourd'hui, ne vous inquiétez pas si l'heure est incluse
Shakti Singh

3
disons que c'est le 02/02/2011 14:02:02 - les utilisateurs qui ont été créés à 10:02:02 ne seront pas renvoyés dans votre version même s'ils ont été créés "aujourd'hui" :)
n00b

@ n00b: Lol ya, aucun utilisateur ne serait jamais renvoyé, si seulement nous pouvions arrêter le temps.
Mike Purcell

15

Si 'created' est de type datetime

SELECT * FROM users WHERE created < DATE_ADD(CURDATE(), INTERVAL 1 DAY);

CURDATE () signifie également '2013-05-09 00:00:00'


Merci pour cela. J'avais en fait besoin de DATE_SUB (utilisé de la même manière), mais cela m'a mis sur la bonne voie.
Daniel Price

Cela ne renverra pas les données dont la date contient 0 dans le temps, c'est-à-dire que «2013-05-09 00:00:00» sera omis
Bsienn

8

La réponse marquée est trompeuse. La question posée est DateTime, mais a déclaré que ce qui était nécessaire était juste CURDATE().

La réponse la plus courte et la plus correcte à cette question est:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;

5

Si la colonne a un index et qu'une fonction est appliquée sur la colonne, l'index ne fonctionne pas et une analyse complète de la table se produit, entraînant une requête très lente.

Pour utiliser l'index et comparer la date / heure avec la date actuelle / actuelle, les éléments suivants peuvent être utilisés.

Solution pour OP:

select * from users
where created > CONCAT(CURDATE(), ' 23:59:59')

Exemple pour obtenir des données pour aujourd'hui:

select * from users
where 
    created >= CONCAT(CURDATE(), ' 00:00:00') AND
    created <= CONCAT(CURDATE(), ' 23:59:59')

Ou utilisez BETWEEN pour faire court

select * from users 
where created BETWEEN 
      CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59')

2
SELECT * FROM users WHERE created >= now()

Cela ne rendra pas les enregistrements avant ce moment à partir d'aujourd'hui.
gsziszi

0

Le code ci-dessous a fonctionné pour moi.

declare @Today date

Set @Today=getdate() --date will equal today    

Select *

FROM table_name
WHERE created <= @Today

-1
SELECT * FROM table_name WHERE CONCAT( SUBSTRING(json_date, 11, 4 ) ,  '-', SUBSTRING( json_date, 7, 2 ) ,  '-', SUBSTRING(json_date, 3, 2 ) ) >= NOW();

json_date ["05/11/2011"]


C'est une solution très brute
IgniteCoders

-5

vous pouvez renvoyer toutes les lignes et utiliser la fonction php dateiff dans une instruction if, bien que cela alourdit le serveur.

if(dateDiff(date("Y/m/d"), $row['date']) <=0 ){    
}else{    
echo " info here";    
}

4
c'est très lent par rapport à la sélection de base de données
IgniteCoders
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.