web-dev-qa-db-fra.com

Date / heure égale ou supérieure à celle d'aujourd'hui dans MySQL

Quelle est la meilleure façon de faire:

SELECT * FROM users WHERE created >= today;

Remarque: créé est un champ datetime.

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

Mais je pense que vous voulez dire created < today

291
Clodoaldo Neto
SELECT * FROM myTable WHERE  DATE(myDate) = DATE(NOW())

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

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

si la colonne est de type date/heure.

30
Shakti Singh

Si 'créé' est un type de date/heure

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

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

14
bart
SELECT * FROM users WHERE created >= now()
3
Silx

Si la colonne a un index et qu'une fonction est appliquée sur la colonne, alors l'index ne fonctionne pas et une analyse complète de la table est effectuée, ce qui provoque une requête très lente.

Pour utiliser index et comparer date/heure avec la date du jour/actuelle, vous pouvez utiliser les éléments suivants.

Solution pour OP:

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

Échantillon 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')
3
Bsienn

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

Le réponse la plus courte et correcte à ceci est:

SELECT * FROM users WHERE created >= CURRENT_TIMESTAMP;
2
JeffMan

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
0
Rob Fahndrich