2015-11-25 2 views
1

J'ai un champ de date dans ma table MySQL et je veux obtenir toutes les lignes avant le 1er décembre prochain. Ainsi, par exemple, les lignes que je devrais récupérer si je lance la requête aujourd'hui (novembre 2015) seraient n'importe quelle date avant le 1er décembre 2015. Si j'exécute la requête après le 1er décembre 2015 mais avant le 1er décembre 2016, toutes les lignes doivent être retournées Désolé pour le manque de code, je n'ai littéralement aucune idée par où commencer avec celui-ci!Comment puis-je obtenir la date du 1er décembre prochain?

+0

date inférieure à jour concatenate 1, mois Décembre, (année réelle si la date actuelle moins de Décembre de l'année en cours ou de l'année en cours +1 si la date réelle est plus grande que le 1er décembre de l'année réelle) –

Répondre

2

Je crée la date limite en fonction du mois en cours (en utilisant now() pour obtenir la date actuelle). Si le mois en cours est 12, la limite est comprise entre 1 et 12 de l'année suivante (year(now()+1), sinon l'année en cours.

select YourDate 
from YourTable 
where YourDate < 
    case when month(now())=12 then 
     date(concat(convert(year(now()+1), char), '-12-01')) 
    else 
     date(concat(convert(year(now()), char), '-12-01')) 
    end; 
+0

Simple et fonctionne. Aussi roulé ma propre soluation, que j'ai posté comme une autre réponse. Performance/meilleures normes sage je ne sais pas quel est le meilleur mais c'est une autre question! –

1

Je pense que vous devriez utiliser quelque chose comme ceci:

SELECT  * 
FROM  Table T 
WHERE  Some_Date < CASE 
          WHEN MONTH(CURDATE()) < 12 THEN STR_TO_DATE('01, 12, ' + YEAR(CURDATE())),'%d,%m,%Y') 
          ELSE STR_TO_DATE('01, 12, ' + YEAR(CURDATE() + 1)),'%d,%m,%Y') 
         END 

Disclaimer: Je n'avez pas mysql, donc je ne pouvais pas le tester.

+0

Je ne pouvais pas obtenir ce code pour travailler pour moi et je ne sais pas comment réparer en raison de la connaissance limitée des fonctions MySQL. –

+0

Mes connaissances mysql sont également limitées. J'opterais pour la réponse de @ agold, on dirait que c'est la même chose. – HoneyBadger

0

Je ne gère ma propre solution trop

SELECT * 
FROM table 
WHERE date < DATE_ADD(MAKEDATE(IF(MONTH(CURRENT_DATE()) < 12, YEAR(CURRENT_DATE()), YEAR(CURRENT_DATE() + INTERVAL 1 YEAR)), 1), INTERVAL + 11 MONTH)