簡體   English   中英

計算MySQL表中兩個時間字段之間的時差

[英]Calculate difference between two time fields in MySQL table

我想計算視圖中兩個時間字段之間的差異(mysql)。 我正在使用此查詢:

$result = mysql_query("CREATE OR REPLACE VIEW arbtim AS SELECT week, name, start, stop, arton,
      ( arton ) - ( start ) AS t18 FROM arbtid;");

“ arton”字段始終為“ 18:00:00”。 如果開始=“ 10:00:00”,則返回“ 80000”。 如果開始=“ 09:45:00”,則返回“ 85500”。 我希望它是“ 8”和8,25

兩個字段均為時間格式。 創建的字段t18為雙精度格式-為什么?

閱讀文檔( http://dev.mysql.com/doc/refman/5.7/en/date-and-time-type-conversion.html )時,不幸的是記錄的行為是85500。 我知道你在想什么...

問題是TIME轉換為10000 *小時+ 100 *分鍾+秒。

由於您需要幾個小時,因此建議您明確地執行以下操作:

(3600*HOUR(arton)+60*MINUTE(arton)+SECOND(arton)
-3600*HOUR(start)-60*MINUTE(start)-SECOND(start))/3600 AS t18

借助TIME_TO_SEC函數,(借助GolezTrol)可以更簡單地編寫為:

(TIME_TO_SEC(arton)-TIME_TO_SEC(start))/3600 AS t18

但是我想更深入地了解這個答案,因為這個奇怪的TIME代數讓我很困擾。 我從未在任何其他RDBMS或語言中看到過類似的東西。 請注意,我還沒有全部看到,但有很多。

令我困擾的是,這個TIME代數是一個陷阱,特別是對於沒有經驗的人。

有太多事情可能會出錯。 以下是部分列表:

  • 100是00:01:00,但100-1不是00:00:59,而是無效時間
  • 100是00:01:00,但100 * 100不是01:40:00,而是01:00:00
  • 100是00:01:00,但100/2不是00:00:30,而是00:00:50

...以及我想起的其他許多內容。

你知道我要去哪里嗎? 不要在時間列上進行操作……不要在這個扭曲和不完整的空間中MySQL提供給我們。 在這個空間中,大多數操作將無法正常運行。

這里唯一合理的解決方案是擺脫困境...將那些時間轉換為我們可以期望的加,減,除和乘的其他時間。 TIME_TO_SEC是一個很好的簡單選擇,但還有其他選擇。 對它們進行任何其他操作之前先轉換TIME值。

有兩種正確的方法:

使用時間戳-在這種情況下,結果將以秒為單位:

SELECT week, name, start, stop, arton,  UNIX_TIMESTAMP( arton ) - UNIX_TIMESTAMP( start ) AS t18 FROM arbtid;

然后,要獲得小時數,請用秒數除以3600。

或使用TIMEDIFF在這種情況下,結果將是類似於“ -00:00:00.000001”的時間值:

SELECT week, name, start, stop, arton,  TIMEDIFF( arton, start ) AS t18 FROM arbtid;

我認為前者可能更適合您的應用程序。

您可以使用TIME_TO_SEC來獲取時間跨度中的秒數。 然后,您可以通過簡單地將其除以3600來計算小時數。

SELECT TIME_TO_SEC(arton - start) / 3600 AS HoursBetween FROM arbtid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM