PostgreSQL ตรวจสอบวันที่เทียบกับ“ วันนี้”


105

สงสัยว่าจะมีใครสามารถช่วยเหลือ Postgres ได้บ้าง ฉันมีตารางที่มีคอลัมน์ที่เรียกว่าmydateซึ่งเป็นประเภทวันที่ postgres ฉันต้องการทำสิ่งที่ชอบ:

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

ฉันไม่เคยใช้ Postgres มาก่อนและฉันแน่ใจว่าฉันแค่ต้องรู้ชื่อของฟังก์ชันบางอย่าง - ฉันยินดีที่จะค้นหาข้อมูลอ้างอิงด้วยตัวเอง ใครช่วยชี้ทิศทางที่ถูกต้องให้ฉันได้ไหม

ขอบคุณ!


2
สำหรับบันทึกเอกสารอยู่ที่นี่ - ใช้เวลาทำความคุ้นเคยเล็กน้อย แต่ครอบคลุมมาก
คดีของ Fund Monica

คำตอบ:


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

หากคุณสนใจเกี่ยวกับวันที่และไม่ใช่เวลาที่แทนcurrent_dateสำหรับnow()


ลงตัวนี้! ขอบคุณ
JustGage

2
โปรดทราบว่าnow()เป็นการประทับเวลาดังนั้นช่วงนี้จะรวมเฉพาะบางส่วนของวันจากปีที่แล้วและเป็นส่วนหนึ่งของวันนี้ด้วย หากคุณต้องการกรองเต็มวันให้แคสต์now()::dateตามที่ Alex Howansky แนะนำ
tokenizer_fsj

1
@tokenizer_fsj ใช้current_dateแทนnow()
Paul Tomblin

66

ฉันคิดว่าสิ่งนี้จะทำได้:

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

10
โปรดทราบว่าไม่เหมือนกับinterval '1 year'ปีอธิกสุรทิน นั่นอาจไม่ใช่ความกังวลของคุณ แต่ถ้าเป็นเช่นนั้นให้ใช้คำตอบของฉัน
Paul Tomblin

นี่ควรเป็นคำตอบที่ได้รับการยอมรับ now()ส่งคืนการประทับเวลาดังนั้นหลังจากลบ'1 day'แล้วคุณจะได้เวลาประทับที่มีแนวโน้มว่าจะกรองบางส่วนของวันที่คุณสนใจจะสืบค้นออกไป คนส่วนใหญ่ต้องการกรองข้อมูลในหนึ่งวันเต็มดังนั้นการใช้now()::dateหรือCURRENT_DATEจำเป็น
tokenizer_fsj


5

คุณยังสามารถตรวจสอบโดยใช้age()ฟังก์ชัน

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

age() จะส่งคืนช่วงเวลา

ตัวอย่างเช่นage( '2015-09-22', now() )จะกลับมา-1 years -7 days -10:56:18.274131

ดูเอกสาร postgresql


ฉันบอกว่าage()เป็นฟังก์ชัน PostgreSQL เท่านั้น (2018-10-05)
loxaxs

ตามที่ตั้งคำถาม @loxaxs
hd1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.