PostgreSQL, tarihi "bugüne" göre kontrol etme


103

Birinin Postgres konusunda yardımcı olup olamayacağını merak ediyordum. mydatePostgres tarih türü olan bir sütunu olan bir tablom var. Şunun gibi bir şey yapmak istiyorum:

SELECT * FROM MyTable WHERE mydate > [Today-1year]

Daha önce hiç Postgres kullanmadım ve eminim sadece bazı işlevlerin adını bilmem gerekiyor - referansı memnuniyetle kendim arayacağım. Biri beni doğru yöne yönlendirebilir mi?

Teşekkürler!


2
Kayıt için, belgeler burada - alışmak biraz zaman alıyor, ancak son derece kapsamlı.
Fund Monica'nın Davası

Yanıtlar:


176
select * from mytable where mydate > now() - interval '1 year';

Yalnızca tarih ve hakkında zaman önem veriyorsanız, yedek current_dateiçinnow()


Bu harika! Teşekkürler
JustGage

2
Bunun now()bir zaman damgası olduğuna dikkat edin , bu nedenle bu aralık aynı zamanda tam olarak bir yıl önceki günün bir bölümünü ve bugünün bir bölümünü de içerecektir. Tam günlerde filtre uygulamak istiyorsanız, now()::dateAlex Howansky'nin önerdiği şekilde yayınlayın.
tokenizer_fsj

1
Kullanım @tokenizer_fsj current_dateyerinenow()
Paul Tomblin

66

Bunun işe yarayacağını düşünüyorum:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;

10
Bunun aksine interval '1 year', bunun artık yıllara saygı duymayacağını unutmayın. Bu senin endişen olmayabilir, ama öyleyse, cevabımı kullan.
Paul Tomblin

Kabul edilen cevap bu olmalıdır. now()bir zaman damgası döndürür, bu nedenle, çıkardıktan sonra '1 day', muhtemelen günün sorgulamakla ilgilendiğiniz bir bölümünü filtreleyecek bir zaman damgası elde edersiniz. Çoğu kişi tek bir tam günde filtre uygulamak ister ve bu nedenle now()::dateveya kullanmak CURRENT_DATEgereklidir.
tokenizer_fsj

9

Bu size şu anki tarihi eksi 1 yıl vermelidir:

select now() - interval '1 year';

5

age()Fonksiyonu kullanarak da kontrol edebilirsiniz.

select * from mytable where age( mydate, now() ) > '1 year';

age() bir aralık döndürecektir.

Örneğin age( '2015-09-22', now() )geri dönecek-1 years -7 days -10:56:18.274131

Postgresql belgelerine bakın


Bana age()sadece PostgreSQL için bir işlev olduğu söylendi (2018-10-05)
loxaxs

Soru olarak @loxaxs
hd1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.