2016-09-21 6 views
0

Ich habe eine Tabelle, die zwei Spalten enthält, expMonth und expYear. Ich brauche SELECT *, wo das Datum älter ist als NOW(). Mein Problem ist, ich weiß nicht einmal, wie ich dieses Problem in SQL angehen kann, weil ich nur einen Monat und ein Jahr habe. Außerdem müsste ich die maximale Anzahl an Tagen für den angegebenen Monat finden und dann basierend darauf die Informationen zusammenfügen, um ein Datum zu erstellen, und dann dieses Datum mit NOW() vergleichen. Von dem, was ich online gesehen habe, können Sie nicht wirklich ein Datum in SQL von nur einem Monat und Jahr erstellen.Berechnung Datum von Monat und Jahr

Beispiel:

expMonth = 09 , expYear = 16. 
findNumberOfDays(expMonth) 
createDate(numberOfDaysforMonth,expMonth,expYear)` 

SELECT * FROM Stacks WHERE createDate < NOW(); 

Das ist nur einige logische/Pseudo-Code war.

Hat jemand irgendwelche Vorschläge, wie man dieses Problem angehen kann?

+0

I diese Energie in Betracht ziehen würden widmen, um diese Spalten in einer Kombination von neue, die alten zwei abzweigend. Dann genießen Sie einige gebackene Funktionalität und hohe Leistung – Drew

+0

Drew, würde ich gerne, wenn ich eine Kontrolle über diese hatte, aber leider ist mein Team mit diesem schlechten db-Design fest. – user1830833

Antwort

0

Hmmm. . .

where str_to_date(concat(exp_year, '-', expmonth), '%Y-%m') < now() 

MySQL kann Teildaten verarbeiten. Aber, wenn Sie wirklich wollen, könnten Sie

str_to_date(concat(exp_year, '-', expmonth, '-01'), '%Y-%m-%d') < now() 

verwenden, wenn Sie denken, dass das klarer ist.

+0

Gordon Linoff, korrigieren Sie mich, wenn ich mich irre, aber das überprüft nur den Monat und das Jahr, nicht auch den Tag. Wie integriere ich den Tag in diese Funktion? – user1830833

+0

@ user1830833. . . MySQL kann Teildaten verarbeiten. Aber, wenn Sie wirklich wollen, könnten Sie 'str_to_date (concat (exp_year, '-', 'expmonth,' -01 '),'% Y-% m-% d ')

0

wo str_to_date (concat (exp_year, '-', expmonth), '% Y-% m-01') < now()

Wenn Sie das Datum müssen der letzte Tag des Monats sein:

wo LAST_DAY (str_to_date (concat (exp_year, '-', expmonth), '% Y-% m-01')) < now()

Verwandte Themen