จะแสดงรายการบันทึกที่มีวันที่จาก 10 วันล่าสุดได้อย่างไร


คำตอบ:


199

ใช่สิ่งนี้ใช้ได้ใน PostgreSQL (สมมติว่าคอลัมน์ " วันที่ " เป็นประเภทข้อมูลdate) ทำไมคุณไม่ลองดูล่ะ

รูปแบบ ANSI SQL มาตรฐานจะเป็น:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

ฉันชอบรูปแบบนั้นมากกว่าเพราะทำให้อ่านง่ายขึ้น (แต่ก็เหมือนกับcurrent_date - 10)


1
แบบสอบถามควรเป็น: SELECT Table.date FROM Table WHERE date> current_date - interval '10 day ';
user2694306

5
@ user2694306: interval '10 day'คือไวยากรณ์ของ Postgres interval '10' dayเป็นไวยากรณ์ที่ยึดตามมาตรฐาน SQL และสนับสนุนโดย Postgres
a_horse_with_no_name

1
ช่วงเวลาที่ควรจะเป็น9 10จริงให้คุณย้อนกลับไป 11 วันนับจากวันนี้
David He

1
@DavidHe: สิ่งนี้เหมือนกับคำตอบเดิม ซึ่งใช้10ไม่ใช่9
a_horse_with_no_name

3
หมายเหตุ: ใน Redshift สูตรของ @ user2694306 ใช้งานได้: ช่วงเวลา '10 วัน ' ช่วงเวลา '10' วันไม่ทำงานบน Redshift
เบ็น

34

http://www.postgresql.org/docs/current/static/functions-datetime.htmlแสดงตัวดำเนินการที่คุณสามารถใช้สำหรับการทำงานกับวันที่และเวลา (และช่วงเวลา)

ดังนั้นคุณต้องการ

SELECT "date"
FROM "Table"
WHERE "date" > (CURRENT_DATE - INTERVAL '10 days');

ตัวดำเนินการ / ฟังก์ชันข้างต้นได้รับการบันทึกไว้โดยละเอียด:


9

ความเข้าใจของฉันจากการทดสอบของฉัน (และPostgreSQL dox ) คือคำพูดต้องทำแตกต่างจากคำตอบอื่น ๆ และควรมี "วัน" ดังนี้:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

แสดงให้เห็นที่นี่ (คุณควรจะสามารถเรียกใช้สิ่งนี้บน Postgres db):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

ผลลัพธ์:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

ที่จริงฉันพลาดที่สังเกตว่าคำตอบของแบรดลีย์นั้นถูกต้อง อย่างไรก็ตามฉันจะทิ้งของฉันไว้ที่นี่เพื่อพิสูจน์ว่าเป็นวิธีที่ถูกต้อง คำตอบที่ยอมรับนั้นผิด (อย่างน้อยสำหรับเวอร์ชันของ Postgre ที่ฉันกำลังทำงานอยู่)
ผิดปกติอย่างมาก

0

ฉันจะตรวจสอบประเภทข้อมูล

current_date มีประเภทข้อมูล "วันที่" 10 คือตัวเลขและ Table.date - คุณต้องดูตารางของคุณ


0

คุณสามารถใช้ระหว่าง:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

1
betweenจะต้องมีค่าต่ำสุดครั้งแรกดังนั้นนี้จะต้องทำอย่างถูกต้องเป็น SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
ประเภท

0

เพียงแค่สรุปข้อความค้นหาหากคุณต้องการทำงานกับวันที่ใดก็ตามแทนที่จะเป็นวันที่ปัจจุบัน:

SELECT Table.date
  FROM Table 
  WHERE Table.date > '2020-01-01'::date - interval '10 day'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.