Vin*_*lva 8 mysql sql time date
我在MySQL DB中有以下表格:
year | day_of_year
2012 | 283.813090
Run Code Online (Sandbox Code Playgroud)
如何转换这些字段DateTime?
我试过了:
SELECT MAKEDATE(year, day_of_year) from tableName;
它返回Date(yyyy-mm-dd)...我怎样才能得到Time(hh:mm:ss)?
任何人都可以帮我解决这个问题吗?
通过使用MySQL的SEC_TO_TIME()功能(以及一点点数学运算),您将能够获得时间戳.
所涉及的数学运算是将您的day_of_year列乘以一天中的秒数,86400,然后将结果乘以86400,得到等式((day_of_year * 86400) % 86400):
SELECT SEC_TO_TIME((day_of_year * 86400) % 86400) AS time;
Run Code Online (Sandbox Code Playgroud)
如果我用这个值运行283.813090它,它会给我正确的时间*:
mysql> SELECT SEC_TO_TIME((283.813090 * 86400) % 86400) AS time;
+----------+
| time |
+----------+
| 19:30:51 |
+----------+
Run Code Online (Sandbox Code Playgroud)
要将其与实际日期相结合,您可以在两个单独的列中选择它们,也可以使用它CONCAT()来获得真正的"时间戳":
SELECT
CONCAT(MAKEDATE(year, day_of_year), ' ', SEC_TO_TIME((day_of_year * 86400) % 86400)) AS timestamp
FROM tableName;
Run Code Online (Sandbox Code Playgroud)
*时间计算背后的数学是相当简单的.因为283.813090,这说有283天.为了计算时间,我们使用小数部分乘以24(小时)..813090 * 24 = 19.51416.这说有19个小时; 为了计算分钟数,我们取其中的小数部分并乘以60 .51416 * 60 = 30.8496,即30分钟.对于秒,再次,取小数部分并乘以60 : .8496 * 60 = 50.976. 所以,我们总共有19小时30分50秒(以.976毫秒为准) - 19:30:51或晚上7:30.