使用mySQL划分时间字段

时间:2013-08-03 08:56:02

标签: mysql timestamp

我有一个包含一些数据的时间序列表,但时间戳偶尔会关闭。为了检查时间戳,我们已经手动定义日出和日落以使用PAR(光合有效辐射)值估算太阳中午 - PAR说明有多少光进入 - 确定黎明和黄昏,然后推断太阳中午在两者之间的中点。我们决定宣布PAR升至1.9以上,通常是早上7点左右的记录是黎明,而PAR等于或小于1.9的记录被视为夜幕降临。

我选择了高于1.9的PAR值,然后使用GROUP BY找到每天的最小和最大时间值,这有效:

SELECT datePart,MIN(timePart)AS sunrise,     MAX(timePart)日落,     TIMEDIFF(MAX(timePart)     MIN(timePart))AS dayHours FROM     Imnavait101119_110225     在PAR_2029410_uE> 1.9     GROUP BY datePart

我明白了(是的,这是正确的,它是一个北极网站)。

    datePart    sunrise sunset          dayHours    dayHoursHalf
    07/09/2010  0:07:00 23:52:00    23:45:00    NULL
    07/10/2010  0:07:00 23:52:00    23:45:00    NULL
    07/11/2010  0:07:00 23:22:00    23:15:00    NULL
    07/12/2010  1:37:00 23:52:00    22:15:00    NULL
    07/13/2010  0:07:00 23:52:00    23:45:00    NULL
    07/14/2010  0:07:00 23:52:00    23:45:00    NULL
    07/15/2010  0:07:00 23:52:00    23:45:00    NULL
    07/16/2010  0:07:00 23:52:00    23:45:00    NULL
    07/17/2010  0:07:00 23:52:00    23:45:00    NULL
    07/18/2010  0:07:00 23:52:00    23:45:00    NULL
    07/19/2010  0:22:00 23:52:00    23:30:00    NULL
    07/20/2010  0:07:00 23:52:00    23:45:00    NULL
    07/21/2010  0:07:00 23:52:00    23:45:00    NULL

现在我有TIMEDIFF值,我想将此值除以2以添加到日出以获得太阳中午。我创建了一个列来保存值,但似乎无法弄清楚如何获取它。我已经能够除以2或乘以0.50,但得到非常奇怪的结果,通常沿着这些线

SELECT  @dayHoursHalf := (dayHours * 0.50) as dayHoursHalf 

FROM Imnavait101119_110225_TimestampCheck

我得到了这个:

dayHoursHalf
117250
117250
115750
110750
117250
117250
117250
117250
117250
117250
116500
117250
117250
117250

我甚至不知道从哪里开始 - 这些数字对我来说毫无意义,而且我找不到任何关于如何为小数时间值编码查询的信息。

非常感谢所有响应者。

3 个答案:

答案 0 :(得分:2)

编辑:我错误地计算了“中午”而不是dayHours的一半,这个查询会做你真正想要的事情:)

UPDATE Imnavait101119_110225_TimestampCheck 
   SET dayHoursHalf = SEC_TO_TIME(TIME_TO_SEC(dayHours)/2);

An SQLfiddle to test with


原件:

此查询改为计算“中午”的时间,正好在日出和日落之间;

UPDATE Imnavait101119_110225_TimestampCheck 
  SET dayHoursHalf = SEC_TO_TIME(TIME_TO_SEC(`sunrise`)  + 
                                 TIME_TO_SEC(dayHours)/2);

An SQLfiddle to test with

(请注意,SQLfiddle出于某种原因显示时间值的虚拟日期:))

答案 1 :(得分:1)

那么,11.7250 x 2 = 23.45,这是你" Day hours"的价值。 如果我做对了,你需要将时间除以2,所以首先我认为最好是substr()你的值得到23和45.比你能得到合适的时间。

答案 2 :(得分:1)

如果理解正确,你可以像这样选择你的值

SELECT q.*, 
       ADDTIME(sunrise, SEC_TO_TIME(TIME_TO_SEC(dayHours) / 2)) dayHoursHalf 
FROM
(
  SELECT datePart, 
         MIN(timePart) sunrise, 
         MAX(timePart) sunset, 
         TIMEDIFF(MAX(timePart), MIN(timePart)) dayHours 
    FROM Imnavait101119_110225 
   WHERE PAR_2029410_uE > 1.9 
   GROUP BY datePart
) q

示例输出:

+------------+----------+----------+----------+---------------+
| datePart   | sunrise  | sunset   | dayHours | dayHoursHalf  |
+------------+----------+----------+----------+---------------+
| 2010-07-09 | 00:07:00 | 23:52:00 | 23:45:00 | 11:59:30.0000 |
| 2010-07-10 | 00:07:00 | 23:52:00 | 23:45:00 | 11:59:30.0000 |
| 2010-07-11 | 00:07:00 | 23:22:00 | 23:15:00 | 11:44:30.0000 |
| 2010-07-12 | 01:37:00 | 23:52:00 | 22:15:00 | 12:44:30.0000 |
...

这是 SQLFiddle 演示

<小时/> 并且为了使用相应的值

更新dayHoursHalf
UPDATE Table1
   SET dayHoursHalf = ADDTIME(sunrise, SEC_TO_TIME(TIME_TO_SEC(dayHours) / 2))

这是 SQLFiddle 演示