我的SQL代码提供了错误的转换 -
代码 -
SELECT
,begins as "START_TIME"
, ends as "END_TIME"
, (ends-begins) DAY(4) TO SECOND as "Duration"
,EXTRACT(DAY FROM Duration) * 86400 + EXTRACT(HOUR FROM Duration) * 3600 + EXTRACT(MINUTE FROM Duration) * 60 + EXTRACT(SECOND FROM Duration) as "Duration_in_sec"
FROM
TABLE_NAME
输出 -
+-----------------+-----------------+-------------------+-----------------+
| START_TIME | END_TIME | Duration | Duration_in_sec |
+-----------------+-----------------+-------------------+-----------------+
| 9/20/2017 6:11 | 9/20/2017 13:45 | 0 07:33:05.000000 | 113,585 |
| 8/21/2017 10:58 | 8/28/2017 6:13 | 6 19:14:49.000000 | 674,089 |
| 9/20/2017 6:11 | 9/20/2017 11:45 | 0 05:34:14.000000 | 106,454 |
| 7/17/2017 0:57 | 7/17/2017 3:00 | 0 02:03:12.000000 | 93,792 |
| 7/23/2017 21:41 | 7/24/2017 2:41 | 0 04:59:28.000000 | 104,368 |
| 12/3/2016 15:20 | 12/4/2016 15:20 | 1 00:00:03.000000 | 172,803 |
| 8/24/2017 19:42 | 8/24/2017 20:30 | 0 00:48:27.000000 | 89,307 |
| 8/29/2017 23:07 | 8/30/2017 6:00 | 0 06:53:14.000000 | 111,194 |
+-----------------+-----------------+-------------------+-----------------+
但我清楚地知道第一记录7:33:05(7小时33分钟和5秒)= 27 185秒而不是113,585
我怀疑我的逻辑错误但不确定在哪里。
编辑 - 使用
EXTRACT(从持续时间开始)* 3600 + EXTRACT(从持续时间开始) * 60 + EXTRACT(来自持续时间的第二个)为“Duration_in_sec”
而不是
提取(持续时间为一天)* 86400 +提取(从持续时间开始)* 3600 +提取(持续时间为分钟)* 60 +提取(第二次来自 持续时间)为“Duration_in_sec”
适用于值<24小时。
这似乎是提取功能中的一个错误。
PS - 我的总体目标是将持续时间列除以 int 列。为了做到这一点,我将持续时间转换为秒。如果有任何其他方式划分。请告诉我。
答案 0 :(得分:0)
找到答案 -
即使当天为0,系统也会返回1.
例如,对于(0 07:33:05.000000)
EXTRACT(DAY FROM Duration)-1
即使天数为0,也将返回1而不是0.因此,所有计算都添加了84600秒(不确定原因)。
所以我只是将逻辑改为
if(preg_match_all('/(\n|\s)+@[,\-_]*(\w+([,\-_]\w+)?)/', $content, $match)) {
foreach($match[2] as $usr) {
-code here-
}
}
答案 1 :(得分:0)
试试,
SELECT CONVERT(VARCHAR, DATEDIFF(dd, @start, @end)) + ' Days '
+ CONVERT(VARCHAR, DATEDIFF(hh, @start, @end) % 24) + ' Hours '
+ CONVERT(VARCHAR, DATEDIFF(mi, @start, @end) % 60) + ' Minutes '
+ CONVERT(VARCHAR, DATEPART(ss, DATEADD(s, @x, CONVERT(DATETIME2, '0001-
01-01')))) + ' Seconds'
乘以86400秒和小时乘以3600分钟和60分钟,得到所有的总和。