2012-09-06 9 views
7

bugüne kadar MySQL ile çalışırken ve tarih/saat ile eylemler gerçekleştirmek gerekiyordu unix zaman damgasıyla int sütunu kullanıyordum ve herhangi bir sorun yoktu, ancak bugün bazı rehberleri okuduktan sonra karar verdim varsayılan olarak "current_timestamp" ile test zaman damgası sütunu.MySQL Current_timestamp tarafından geçen ayki verisi seçin

Bu yüzden, "2012-09-07 00:23:30" biçimindeki bilgilerin bulunduğu sütuna göre son ay verilerini nasıl seçeceğimle ilgileniyorum? Ve belki de bu ayın başlangıcından (30 gün değil, bugüne kadar 09-01 00:00:00) veri gönderecek bazı zor sorular var mı?

+0

Uzun bir süre önce benzer bir sorunla karşılaştım ve sunucu tarafı diliyle tarihleri ​​hesaplamaya son verdim (bu durumda php ancak bunu yapmanıza izin verecek). Neyse, bu da ilgileniyor :) – jribeiro

+0

@jribeiro Bir cevap yazdı, bir göz atın. – Ariel

cevap

17

Bu, geçen ay verecektir: Ayın başından itibaren

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

Bu: özel bir şey ARASINDA

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

The, o

dateColumn <= ... AND dateColumn >= .... 
için sadece bir kısayol var

Hmm, sanırım NOW() karşılaştırması aslında gerekli değil, çünkü tüm kayıtlar şimdi daha önce olacak.

Dolayısıyla, sadece yapın: Geçerli ayın

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

Dinamik başlangıç:

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

bu çıkarma, sonra Geçerli tarihten ayın gününü ayıklama olduğunu mu Bütün bu kaç gün daha az bir ondan.

Sen common_schema bakmak gerekir
+0

Sorunun dinamik olması gerekirse, bununla karşılaştığım sorun. Bunu yapıyorum ama yine de sunucu tarafında ayın başlangıcını bulmak zorundayım. Ama belki bu OP talebinin ötesine geçer. :) – jribeiro

+0

@jribeiro Dynamic is problem değil - cevabı güncelledim. – Ariel

3

, bu yüklemek kolaydır ve aradığınız tam olarak ne start_of_month() denilen bir fonksiyonu da dahil olmak üzere çok sayıda harika araca sahiptir: Bir MySQL zaman damgası varsa

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

, 2013-09-29 22:27:10 gibi bir şey, sonra unix bu

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

dönüştürme yapmak Eylül için bu durumda 9, ay ayıklamak için unix zaman işlevlerini kullanabilirsiniz.

+1

daha iyisi 'MONTH (zaman) = (MONTH (NOW()));' – Federico

+0

this Bu ay gelecek yıl ne olacak? – Mala

+0

, MONTH (time) = (MONTH (NOW())) ve YEAR (time) = YEAR (NOW())) 'den tablodan * birini seçebilir; – Stenyg

İlgili konular