2012-09-06 10 views
7

bis heute, als ich mit MySQL arbeitete und Aktionen mit Datum/Zeit durchführen musste ich Int-Spalte mit Unix-Timestamp und es gab keine Probleme, aber heute nach dem Lesen einiger Anleitungen entschied ich mich zu Testzeitstempelspalte mit "current_timestamp" standardmäßig.MySQL Wählen Sie letzten Monat Daten von current_timestamp

So bin ich interessiert, wie im letzten Monat Daten nach Spalte, wo Informationen in "2012-09-07 00:23:30" Format auswählen? Und vielleicht gibt es ein paar knifflige Fragen, was gibt mir Daten von Anfang dieses Monats (nicht letzte 30 Tage, sondern von 09-01 00:00:00 bis heute)?

+0

Ich konfrontiert mit einem ähnlichen Problem vor nicht allzu langer Zeit und endete mit der Berechnung der Daten durch serverseitige Sprache (in diesem Fall php, aber alle können Sie dies tun). Wie auch immer, auch daran interessiert :) – jribeiro

+0

@jribiro Posted eine Antwort, schauen Sie. – Ariel

Antwort

17

Dies wird Ihnen im letzten Monat geben:

WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW(); 

Dieses von Anfang des Monats:

WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW(); 

Die BETWEEN ist nichts Besonderes, es ist nur eine Abkürzung für

dateColumn <= ... AND dateColumn >= .... 

Hmm, ich denke, der NOW() - Vergleich wird nicht wirklich benötigt, da alle Datensätze vorher vorliegen werden.

So tun gerade:

WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d') 

Dynamischer Start des aktuellen Monats:

WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY 

All dies tut, ist der Tag des Monats ab dem aktuellen Datum zu extrahieren, dann subtrahieren, dass viele Tage weniger ein davon.

+0

Das Problem, das ich sehe, ist, wenn die Abfrage dynamisch sein muss. Ich mache das, aber ich muss immer noch den Anfang des Monats auf der Serverseite finden. Aber vielleicht geht das über das hinaus, was das OP gefordert hat. :) – jribeiro

+0

@jribeiro Dynamisch ist kein Problem - Ich habe die Antwort aktualisiert. – Ariel

3

Sie einen Blick auf common_schema nehmen sollte, ist es einfach, viele große Werkzeuge zu installieren und hat, einschließlich einer Funktion start_of_month() genannt, die genau das, was Sie suchen:

select * 
from your_table 
where your_column >= common_schema.start_of_month(now()) 
-1

Wenn Sie eine MySQL-Zeitstempel haben , so etwas wie 2013-09-29 22:27:10 können Sie diesen

select * from table WHERE MONTH(FROM_UNIXTIME(UNIX_TIMESTAMP(time)))=9; 

Convert to Unix tun, dann die Funktionen Unix-Zeit verwenden, den Monat, in diesem Fall 9 für september zu extrahieren.

+1

besser noch 'wählen * aus der Tabelle wo MONAT (Zeit) = (MONAT (JETZT()));' – Federico

+0

Was ist mit diesem Monat nächstes Jahr? – Mala

+0

vielleicht * aus der Tabelle auswählen, wo MONTH (time) = (MONTH (NOW())) und YEAR (time) = YEAR (NOW())); – Stenyg

Verwandte Themen