ค้นหาความแตกต่างระหว่างการประทับเวลาเป็นวินาทีใน PostgreSQL


127

ฉันมีตารางที่PostgreSQL 8.3มี 2 timestampคอลัมน์ ฉันต้องการรับความแตกต่างระหว่างสิ่งเหล่านี้timestampsในไม่กี่วินาที คุณช่วยฉันหน่อยได้ไหมว่าต้องทำอย่างไร

TableA
(
  timestamp_A timestamp,
  timestamp_B timestamp
)

ฉันต้องการที่จะได้รับสิ่งที่ต้องการ(timestamo_B - timestamp_A)ในไม่กี่วินาที(ไม่เพียง แต่ความแตกต่างระหว่างวินาทีก็ควรจะรวมถึงชั่วโมงนาที ฯลฯ )

คำตอบ:


240

ลอง: 

SELECT EXTRACT(EPOCH FROM (timestamp_B - timestamp_A))
FROM TableA

รายละเอียดที่นี่: EXTRACT .


3
ขอบคุณมากสำหรับคำตอบ ได้ผล !!! ในคำค้นหาด้านบนเราไม่มีวงเล็บปิด แต่ฉันคิดออกแล้ว ขอบคุณมากสำหรับการตอบกลับอย่างรวดเร็ว
อรุณ

30
select age(timestamp_A, timestamp_B)

ตอบความคิดเห็นของ Igor:

select age('2013-02-28 11:01:28'::timestamp, '2011-12-31 11:00'::timestamp);
              age              
-------------------------------
 1 year 1 mon 28 days 00:01:28

มันจะไม่ทำงาน Subtract arguments, producing a "symbolic" result that uses years and monthsมันจะ มันจะไม่ให้ความแตกต่างเป็นวินาที
Igor Romanchenko

@Igor อัปเดตพร้อมผลลัพธ์รวมถึงวินาที OP ไม่เพียงต้องการวินาที แต่ยังรวมถึงนาทีชั่วโมง ฯลฯ
Clodoaldo Neto

5
to get the difference between these timestamps in secondsถ้าผมเข้าใจเขาอย่างถูกต้องที่เขาต้องการ และหมายความว่ามันจะต้องมีความแตกต่างอย่างเต็มรูปแบบเช่นit should include hours, minutes etc 10:25:30 - 10:15:25 = 605 secondsฉันเดา - เขาใช้EXTRACT(SECONDS FROM ...)และได้รับ10:25:30 - 10:15:25 = 5 seconds
Igor Romanchenko

1
@Igor ยังไม่ชัดเจน แต่ตอนนี้ที่คุณพูดฉันคิดว่าคุณน่าจะใช่
Clodoaldo Neto

@Clodoaldo: ฉันต้องการผลลัพธ์ตามที่อิกอร์กล่าวไว้ ฉันต้องการความแตกต่างทั้งหมดในไม่กี่วินาที
อรุณ

0
SELECT (cast(timestamp_1 as bigint) - cast(timestamp_2 as bigint)) FROM table;

ในกรณีถ้ามีคนจะมีปัญหาการใช้สารสกัดจาก


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