110 votes

Comparer les dates dans MySQL

Je veux comparer une date provenant d'une base de données qui se situe entre deux dates données. La colonne de la base de données est DATETIME, et je veux la comparer uniquement au format date, et non 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 à 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-' à la ligne 1

Comment résoudre ce problème ?

102voto

Nik Points 1832

Vous pouvez essayer la requête ci-dessous,

select * from players
where 
    us_reg_date between '2000-07-05'
and
    DATE_ADD('2011-11-10',INTERVAL 1 DAY)

50 votes

Pour les personnes venant de google : la date dans mysql est au format yyyy-mm-dd.

98voto

Mark Byers Points 318575

C'est-à-dire Syntaxe du serveur SQL pour convertir une date en chaîne de caractères. 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 voulez profiter d'un index sur la colonne us_reg_date vous pourriez vouloir 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 votes

J'apprécie que vous ayez pensé à tirer parti de l'index. Je pense que la requête ne devrait pas avoir la clause "+ intervalle 1 jour".

13voto

Rahat Points 382

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.

7voto

Gurjeet Singh Points 95

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

4voto

C'est ce qui 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û modifier STR_TO_DATE(column, '%d/%m/%Y') par rapport aux solutions précédentes, car le chargement prenait du temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X