PostgreSQL, memeriksa tanggal relatif terhadap "hari ini"

103

Ingin tahu apakah seseorang dapat membantu dengan beberapa Postgres. Saya memiliki tabel yang memiliki kolom yang disebut mydatetipe tanggal postgres. Saya ingin melakukan sesuatu seperti:

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

Saya belum pernah menggunakan Postgres sebelumnya dan saya yakin saya hanya perlu mengetahui nama beberapa fungsi- Saya akan dengan senang hati mencari referensinya sendiri. Adakah yang bisa mengarahkan saya ke arah yang benar?

Terima kasih!

Joseph
sumber
2
Sebagai catatan, dokumentasinya ada di sini - perlu sedikit membiasakan diri, tetapi sangat komprehensif.
Dana Gugatan Monica

Jawaban:

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

Jika Anda hanya peduli tentang tanggal dan bukan waktunya, pengganti current_dateuntuknow()

Paul Tomblin
sumber
Ini sempurna! Terima kasih
JustGage
1
Perhatikan bahwa itu now()adalah stempel waktu, jadi rentang ini juga hanya akan menyertakan sebagian hari dari setahun yang lalu dan sebagian dari hari ini. Jika Anda ingin memfilter pada hari-hari penuh, now()::dategunakan sesuai saran Alex Howansky.
tokenizer_fsj
1
@tokenizerfsj untuk digunakan current_datesebagai penggantinow()
Paul Tomblin
66

Saya pikir ini akan berhasil:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Alex Howansky
sumber
10
Perhatikan bahwa tidak seperti interval '1 year', ini tidak akan menghormati tahun kabisat. Itu mungkin bukan urusan Anda, tetapi jika ya, gunakan jawaban saya.
Paul Tomblin
Ini harus menjadi jawaban yang diterima. now()mengembalikan stempel waktu, jadi setelah mengurangi '1 day', Anda akan mendapatkan stempel waktu yang kemungkinan akan memfilter bagian dari hari yang ingin Anda buat kueri. Kebanyakan orang ingin memfilter dalam satu hari penuh, dan menggunakan now()::dateatau CURRENT_DATEperlu.
tokenizer_fsj
9

Ini akan memberi Anda tanggal saat ini dikurangi 1 tahun:

select now() - interval '1 year';
coderaj.dll
sumber
5

Anda juga dapat memeriksa menggunakan age()fungsi tersebut

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

age() akan mengembalikan sebuah interval.

Misalnya age( '2015-09-22', now() )akan kembali-1 years -7 days -10:56:18.274131

Lihat dokumentasi postgresql

Dokter
sumber
Saya diberi tahu age()adalah fungsi hanya-PostgreSQL (2018-10-05)
loxaxs
Sebagai id pertanyaan @loxaxs
hd1