[英]calculate difference between two date with php time() function in mysql query
[英]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代數是一個陷阱,特別是對於沒有經驗的人。
有太多事情可能會出錯。 以下是部分列表:
...以及我想起的其他許多內容。
你知道我要去哪里嗎? 不要在時間列上進行操作……不要在這個扭曲和不完整的空間中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.