pourquoi MySQL sélectionne la date ne fonctionne pas pour un mois différent

J'ai une très vieille database que j'ai faite quand j'étais encore en train d'apprendre PHP et MySQL. Si je remplis:

SELECT * FROM Jobs WHERE (date BETWEEN 'Aug.01 2016' AND 'Aug.31 2016') 

Je peux réellement peupler des rangées

Found rows: 4 Warnings: 0 Duration for 1 query: 0.000 sec.

Mais une fois que je change de mois (déplacement de la plage du 1er août au 1er juillet):

 SELECT * FROM Jobs WHERE (date BETWEEN 'Jul.01 2016' AND 'Aug.31 2016') 

Je n'ai rien, même si la gamme Juillet 1 ~ Août 31 comprend Août 1 ~ Août 31 (de l'exemple précédent), qui devrait peupler au less 4 lignes

Found rows: 0 Warnings: 0 Duration for 1 query: 0.016 sec.

Y a-t-il un moyen de peupler les lignes même si elles ont un mois différent?

Vous devez d'abord convertir votre string de date à une date valide:

 SET @date := 'Aug.01 2016'; SELECT STR_TO_DATE(@date,'%M.%d %Y'); 

Sortie (aaaa-mm-jj): 2016-08-01

Maintenant, utilisez ceci dans votre requête pour searchr des résultats ayant des dates entre 2016-07-01 & 2016-08-31 .

 SELECT * FROM Jobs WHERE STR_TO_DATE(date,'%M.%d %Y') BETWEEN '2016-07-01' AND '2016-08-31'; 

Remarque: mais la date doit être stockée dans une colonne de type de données de date . Il est grand time de convertir le datatype de datatype à la date de votre colonne de date .

Pour ce faire, suivez les étapes ci-dessous:

 ALTER TABLE Jobs ADD new_date_column date; UPDATE Jobs SET new_date_column = STR_TO_DATE(date,'%M.%d %Y'); ALTER TABLE Jobs DROP COLUMN `date`; ALTER TABLE Jobs CHANGE COLUMN `new_date_column` `date` date; 

Les étapes dans une coquille de noix:

  1. Ajouter une nouvelle colonne dans la table des Jobs de type date .

  2. Maintenant, mettez à jour cette nouvelle colonne avec les valeurs de votre colonne de date après la conversion en une date valide.

  3. Vous n'avez pas besoin de cette colonne de date . Alors déposez-le.

  4. Renommez maintenant la colonne nouvellement créée à date .