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?

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)

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

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.


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

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

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.