ลบ 1 วันจากวันที่ประทับเวลา


98

ฉันใช้ Datagrip สำหรับ Postgresql (ex: 2016-11-01 00:00:00)ฉันมีตารางที่มีข้อมูลวันที่ในรูปแบบเวลา ฉันต้องการที่จะสามารถ:

  1. ใช้ตัวดำเนินการทางคณิตศาสตร์เพื่อลบ 1 วัน
  2. กรองตามกรอบเวลาของวันนี้ -130 วัน
  3. แสดงโดยไม่มีส่วน hh / mm / ss ของตราประทับ (2016-10-31)

แบบสอบถามเริ่มต้นปัจจุบัน:

select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
from sourcetable 
where  date_at <= now() - 130
group by org_id, dateat

((date_at)-1)ประโยคในบรรทัด 1 ผลลัพธ์ใน:

[42883] ข้อผิดพลาด: ไม่มีตัวดำเนินการ: การประทับเวลาโดยไม่มีเขตเวลา - คำแนะนำจำนวนเต็ม: ไม่มีตัวดำเนินการที่ตรงกับชื่อและประเภทอาร์กิวเมนต์ที่กำหนด คุณอาจต้องเพิ่มการแคสต์ประเภทโจ่งแจ้ง ตำแหน่ง: 69

now()ข้อ spawns ข้อความที่คล้ายกัน:

[42883] ข้อผิดพลาด: ไม่มีตัวดำเนินการ: ประทับเวลาด้วยเขตเวลา - คำแนะนำจำนวนเต็ม: ไม่มีตัวดำเนินการที่ตรงกับชื่อและประเภทอาร์กิวเมนต์ที่กำหนด คุณอาจต้องเพิ่มการแคสต์ประเภทโจ่งแจ้ง ตำแหน่ง: ...

คำแนะนำออนไลน์สำหรับประเภทแคสต์ไม่เป็นประโยชน์อย่างยิ่ง การป้อนข้อมูลได้รับการชื่นชม

คำตอบ:


226

ใช้INTERVALประเภทไปเลย เช่น:

--yesterday
SELECT NOW() - INTERVAL '1 DAY';

--Unrelated to the question, but PostgreSQL also supports some shortcuts:
SELECT 'yesterday'::TIMESTAMP, 'tomorrow'::TIMESTAMP, 'allballs'::TIME;

จากนั้นคุณสามารถทำสิ่งต่อไปนี้ในแบบสอบถามของคุณ:

SELECT 
    org_id,
    count(accounts) AS COUNT,
    ((date_at) - INTERVAL '1 DAY') AS dateat
FROM 
    sourcetable
WHERE 
    date_at <= now() - INTERVAL '130 DAYS'
GROUP BY 
    org_id,
    dateat;


เคล็ดลับ

เคล็ดลับ 1

คุณสามารถต่อท้ายตัวถูกดำเนินการได้หลายตัว เช่นรับวันสุดท้ายของเดือนปัจจุบันได้อย่างไร?

SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';

เคล็ดลับ 2

คุณยังสามารถสร้างช่วงเวลาโดยใช้make_intervalฟังก์ชันซึ่งมีประโยชน์เมื่อคุณต้องการสร้างในรันไทม์ (ไม่ใช้ตัวอักษร):

SELECT make_interval(days => 10 + 2);
SELECT make_interval(days => 1, hours => 2);
SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);


ข้อมูลเพิ่มเติม:

ฟังก์ชันวันที่ / เวลาและตัวดำเนินการ

ประเภทข้อมูล-datetime (ค่าโดยเฉพาะ)

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