Comparez les dates dans MySQL

92

Je souhaite comparer une date d'une base de données comprise entre 2 dates données. La colonne de la base de données est DATETIME, et je veux la comparer uniquement au format de date, pas au format datetime.

SELECT * FROM `players` WHERE CONVERT(CHAR(10),us_reg_date,120) >= '2000-07-05' AND CONVERT(CHAR(10),us_reg_date,120) <= '2011-11-10'

J'obtiens cette erreur lorsque j'exécute le SQL ci-dessus:

Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'us_reg_date, 120)> =' 2000-07-05 'AND CONVERT (CHAR (10), us_reg_date, 120) <=' 2011- 'at ligne 1

Comment résoudre ce problème?

NVG
la source

Réponses:

94

Vous pouvez essayer ci-dessous la requête,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)
Nik
la source
37
Pour les personnes venant de google: le type de date dans mysql est au format aaaa-mm-jj.
Błażej Michalik
86

Il s'agit de la syntaxe SQL Server pour convertir une date en chaîne. Dans MySQL, vous pouvez utiliser la fonction DATE pour extraire la date d'une date / heure:

SELECT *
FROM players
WHERE DATE(us_reg_date) BETWEEN '2000-07-05' AND '2011-11-10'

Mais si vous souhaitez profiter d'un index sur la colonne, us_reg_datevous pouvez essayer ceci à la place:

SELECT *
FROM players
WHERE us_reg_date >= '2000-07-05'
  AND us_reg_date < '2011-11-10' + interval 1 day
Mark Byers
la source
1
J'apprécie que vous envisagiez de profiter de l'indice. Je pense que la requête ne devrait pas avoir la clause «+ intervalle 1 jour».
Jurgenfd
10

Cela fonctionne pour moi:

select date_format(date(starttime),'%Y-%m-%d') from data
where date(starttime) >= date '2012-11-02';

Notez la chaîne de format '% Y-% m-% d' et le format de la date d'entrée.

Rahatur
la source
6

hé les gars merci pour votre aide j'ai eu la réponse.

voici le code .......

SELECT * FROM table
WHERE STR_TO_DATE(column, '%d/%m/%Y')
  BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
    AND STR_TO_DATE('07/10/15', '%d/%m/%Y')
Gurjeet Singh
la source
2

c'est ce que cela a fonctionné pour moi:

select * from table
where column
BETWEEN STR_TO_DATE('29/01/15', '%d/%m/%Y')
 AND STR_TO_DATE('07/10/15', '%d/%m/%Y')

Veuillez noter que j'ai dû changer STR_TO_DATE (colonne, '% d /% m /% Y') des solutions précédentes, car le chargement prenait du temps

Iria
la source