มีวิธีใดบ้างที่ฉันสามารถสร้างแบบสอบถามใน MySQL ที่จะให้ความแตกต่างระหว่างการประทับเวลาสองครั้งในไม่กี่วินาทีหรือฉันต้องทำใน PHP แล้วถ้าเป็นเช่นนั้นฉันจะทำอย่างไร?
มีวิธีใดบ้างที่ฉันสามารถสร้างแบบสอบถามใน MySQL ที่จะให้ความแตกต่างระหว่างการประทับเวลาสองครั้งในไม่กี่วินาทีหรือฉันต้องทำใน PHP แล้วถ้าเป็นเช่นนั้นฉันจะทำอย่างไร?
คำตอบ:
คุณสามารถใช้TIMEDIFF()
และTIME_TO_SEC()
ฟังก์ชั่นดังต่อไปนี้:
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
คุณยังสามารถใช้UNIX_TIMESTAMP()
ฟังก์ชันตามที่@Amber แนะนำในคำตอบอื่น ๆ :
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
หากคุณกำลังใช้TIMESTAMP
ประเภทข้อมูลฉันเดาว่าUNIX_TIMESTAMP()
โซลูชันจะเร็วกว่าเล็กน้อยเนื่องจากTIMESTAMP
ค่าต่างๆจะถูกจัดเก็บเป็นจำนวนเต็มแทนจำนวนวินาทีนับตั้งแต่ยุค ( แหล่งที่มา ) อ้างถึงเอกสาร :
เมื่อ
UNIX_TIMESTAMP()
ใช้กับTIMESTAMP
คอลัมน์ฟังก์ชันจะส่งคืนค่าการประทับเวลาภายในโดยตรงโดยไม่มีการแปลง "string-to-Unix-timestamp" โดยนัยโปรดทราบว่า
TIMEDIFF()
ส่งคืนข้อมูลประเภทTIME
.TIME
ค่าอาจอยู่ในช่วง "-838: 59: 59" ถึง "838: 59: 59" (ประมาณ 34.96 วัน)
เกี่ยวกับ "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
str_to_date(date_column, '%m/%d/%Y')
ภายในฟังก์ชัน TIMESTAMPDIFF สำหรับคอลัมน์ที่ต้องการให้มีการจัดรูปแบบแก้ไข
TIME_TO_SEC
ใน3020399
ขณะที่สิ่งนี้ส่งกลับค่าที่ถูกต้อง
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
ถ้าคุณต้องการความแตกต่างที่ไม่ได้ลงนามให้เพิ่มABS()
รอบนิพจน์
หรือคุณสามารถใช้แล้วแปลงผลเวลาที่จะวินาทีกับTIMEDIFF(ts1, ts2)
TIME_TO_SEC()
โปรดทราบว่าTIMEDIFF()
การแก้ปัญหาจะทำงานเฉพาะเมื่อdatetimes
มีน้อยกว่า 35 วันออกจากกัน!
TIMEDIFF()
ส่งคืนTIME
ประเภทข้อมูลและค่าสูงสุดสำหรับ TIME คือ 838: 59: 59 ชั่วโมง (= 34,96 วัน)
unit
SECOND