Mariadb

將十進制日期格式設置為 24 小時 HH:MM:SS

  • April 30, 2021

如何在不進行四捨五入的情況下使用 SQL 將“十進制日”轉換為 HH:MM:SS 格式?

使用 MariaDB 5.x,其中一個 DB 欄位包含一個偽日期時間,如 day.time。

我可以使用以下方法從 TIME 列中拉出一天: SELECT dbTime - MOD(dbTime, 1) AS 'Day'

我可以使用以下方法分隔小數時間: MOD(dbTime, 1) AS 'Decimal Day'

我不知道如何將“十進制日”轉換為 HH:MM:SS 格式?format我使用以下 SQL 處理了兩個不同的數字,它為我提供了單獨的 HH:MM:SS 數字,但每當我嘗試使用、cast或時,這些數字總是四捨五入convert

SELECT .51923075705577 * 24 AS 'hour', 
      mod((.51923075705577 * 24), 1) * 60 AS 'minute', 
      mod((mod((.51923075705577 * 24), 1) * 60), 1) * 60 AS 'seconds';

上面顯示的時間是期望的結果。

感謝您對此提供任何幫助。

mysql> SELECT SEC_TO_TIME(86400 * .51923075705577);
+--------------------------------------+
| SEC_TO_TIME(86400 * .51923075705577) |
+--------------------------------------+
| 12:27:41.537410                      |
+--------------------------------------+

(一天有86400秒。)

mysql> SELECT SEC_TO_TIME(86400 * 0.999999);
+-------------------------------+
| SEC_TO_TIME(86400 * 0.999999) |
+-------------------------------+
| 23:59:59.913600               |
+-------------------------------+

mysql> SELECT SEC_TO_TIME(86400 * 0.001);
+----------------------------+
| SEC_TO_TIME(86400 * 0.001) |
+----------------------------+
| 00:01:26.400               |
+----------------------------+

為避免小數秒:

+---------------------------------------------+
| SEC_TO_TIME(ROUND(86400 * .51923075705577)) |
+---------------------------------------------+
| 12:27:42                                    |
+---------------------------------------------+
+---------------------------------------------+
| SEC_TO_TIME(FLOOR(86400 * .51923075705577)) |
+---------------------------------------------+
| 12:27:41                                    |
+---------------------------------------------+

引用自:https://dba.stackexchange.com/questions/281206