Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换datetime mysql中的浮动日_Mysql_Sql_Date_Time - Fatal编程技术网

转换datetime mysql中的浮动日

转换datetime mysql中的浮动日,mysql,sql,date,time,Mysql,Sql,Date,Time,我在MySQL数据库中有下表: year | day_of_year 2012 | 283.813090 如何在DateTime中转换这些字段 我试过: SELECT MAKEDATE(year, day_of_year) from tableName; 从tableName中选择MAKEDATE(年、年中的天); 它返回日期(yyyy-mm-dd)。。。如何获取时间(hh:mm:ss) 有人能帮我解决这个问题吗?以下是我提出的问题: SELECT TIMESTAMP(

我在MySQL数据库中有下表:

year | day_of_year
2012 | 283.813090
如何在
DateTime
中转换这些字段

我试过:

SELECT MAKEDATE(year, day_of_year) from tableName; 从tableName中选择MAKEDATE(年、年中的天); 它返回日期(
yyyy-mm-dd
)。。。如何获取时间(hh:mm:ss)


有人能帮我解决这个问题吗?

以下是我提出的问题:

SELECT TIMESTAMP(
                 MAKEDATE(year, day_of_year),
                 SEC_TO_TIME((1 - (round(day_of_year) - day_of_year)) * 24 * 60 * 60))
FROM tableName;
这是什么?

1-(四舍五入(一年之日)-一年之日)
=>获取小数部分(.813090)

24*60*60
=>一天中的总秒数=24小时*60分钟*60秒

测试

您可以在此处使用SQL FIDLE处理查询:

结果

以下是您在问题中提供的两个样本的结果:

October, 10 2012 19:30:51+0000
October, 10 2012 20:15:23+0000
参考资料

以下是帮助我构建查询的优秀资源:


通过使用MySQL函数(和一点数学),您将能够获得时间戳

所涉及的数学是将你的
年中的日
列乘以一天中的秒数86400,然后在86400上修改结果,得到等式
((年中的日*86400)%86400)

如果我使用值
283.813090
运行此命令,它将为我提供一天中的正确时间*:

mysql> SELECT SEC_TO_TIME((283.813090 * 86400) % 86400) AS time;
+----------+
| time     |
+----------+
| 19:30:51 |
+----------+
要将其与实际日期结合起来,您可以在两个单独的列中选择它们,或者使用
CONCAT()
来获得真正的“时间戳”:


*时间计算背后的数学相当简单。对于
283.813090
,这表示有283天。为了计算一天中的时间,我们使用分数部分乘以24(小时)<代码>0.813090*24=19.51416。这表示有19个小时;为了计算分钟数,我们取其中的分数部分乘以60
.51416*60=30.8496
,表示30分钟。对于秒,再次取小数部分并乘以60:
.8496*60=50.976
。因此,我们总共有19小时30分50秒(加上0.976毫秒),19:30:51或7:30。我们如何将
283.813090
解码为一个日期/时间?嗯,为什么有人会以这种编码方式存储:)?正确@新家具283是一年中的283º天。。。813090只是那天的一小部分。。。但是在另一个寄存器中,我有一个有效的时间,在一年中的第_天,值283.844016和.844016*24=20.256384?你是怎么得到时间的?@Vidkor exec查询我得到了日期“2012-10-10”,但我不知道如何转换时间…而不是
(年份*86400)%86400
,为什么不干脆
((年份楼层*年份*86400
)@NRohler有几种方法可以计算;我也可以使用
(1-(年份*天)-day_of_year))*86400
。我使用我的方法是因为它(对我来说)更容易阅读,但你可以用你最喜欢的/首选的方法替换相同的结果。@newfurnity这是我无法做的数学!!!!谢谢!!!非常!!!!!
mysql> SELECT SEC_TO_TIME((283.813090 * 86400) % 86400) AS time;
+----------+
| time     |
+----------+
| 19:30:51 |
+----------+
SELECT
    CONCAT(MAKEDATE(year, day_of_year), ' ', SEC_TO_TIME((day_of_year * 86400) % 86400)) AS timestamp
FROM tableName;