这个问题和答案对我来说都没有意义,所以我提供了自己的解决方案,它可以将一个整数(表示秒)转换为小时、分钟和秒。
首次尝试
我的解决方案在下面的名为“MySolution”的字段中给出 -
with ORIGINAL_DATA as (
select
EventDate, OriginalSeconds
from (
values
('01/13/2011', 4860001),
('01/13/2011', 4860001),
('01/14/2013', 3960001),
('02/03/2011', 3960001)
) as rawData(EventDate, OriginalSeconds)
)
SELECT
EventDate,
OriginalSeconds,
LEFT(CONVERT(VARCHAR(5),DATEADD(second, OriginalSeconds, 0), 108), 5) as SolutionFromQuestion,
LEFT(CONVERT(VARCHAR(5), DATEADD(second, OriginalSeconds/100, 0), 108), 5) as SolutionFromAnswer,
LEFT(CONVERT(VARCHAR(8),DATEADD(second, OriginalSeconds, 0), 108), 8) as MySolution,
(OriginalSeconds / 60) as [Minutes],
(OriginalSeconds / 60 / 60) as [Hours],
DATEADD(second, OriginalSeconds, 0) as [Timestamp by adding OriginalSeconds to 0]
from ORIGINAL_DATA
;
这将产生以下结果 -

讨论
所有的回答 - 问题、被接受的答案和我的答案 - 都使用了代码DATEADD(second, OriginalSeconds, 0)。这段代码从"零日期"开始,然后加上我们感兴趣的秒数(OriginalSeconds)。
我只将这段代码放在了最后一列。从最后一列的结果可以看出,用这种方式计算得到的日期是1900年2月,也就是说OriginalSeconds相当于超过30天的时间。
我还简单地将OriginalSeconds整数除以60,以显示我们应该期望的分钟数(Minutes),然后再除以60,以显示我们应该期望的小时数(Hours)。很明显,这些OriginalSeconds整数对应着每个超过1,000小时的时间...所以当问题说期望的值是"13:30"时,我真不知道它在说什么。问题要求的是小时和分钟。正确的值应该像1350:00这样。
按照接受的答案的方法,但将字符串扩展到8个字符,可以得到小时、分钟和秒。我的解决方案显示了与问题中类似的值,但包括了秒的部分,即"06:00:01" - 这是计算出来的日期时间的时间部分,但忽略了整天的部分...所以从技术上讲这仍然不正确。就像我说的,正确的答案应该在某些行中显示1,350小时。
最终解决方案
最终解决方案提供以下内容:
请参见以下列:
FinalSolutionWithDays
FinalSolutionWithoutDays
以下是代码:
with ORIGINAL_DATA as (
select
EventDate, OriginalSeconds
from (
values
('01/13/2011', 4860001),
('01/13/2011', 4860001),
('01/14/2013', 3960001),
('02/03/2011', 3960001)
) as rawData(EventDate, OriginalSeconds)
)
select
EventDate,
OriginalSeconds,
LEFT(CONVERT(VARCHAR(8),DATEADD(second, OriginalSeconds, 0), 108), 8) as TimePart,
DATEADD(second, OriginalSeconds, 0) as FullTimestamp,
datediff(day, 0, DATEADD(second, OriginalSeconds, 0)) as DaysPart,
cast(
datediff(day, 0, DATEADD(second, OriginalSeconds, 0)) -- days part
as varchar(32)
)
+ ' days '
+ LEFT(CONVERT(VARCHAR(8),DATEADD(second, OriginalSeconds, 0), 108), 8) -- time part
as FinalSolutionWithDays,
datediff(hour, 0, DATEADD(second, OriginalSeconds, 0)) as HoursTotal,
right(LEFT(CONVERT(VARCHAR(8),DATEADD(second, OriginalSeconds, 0), 108), 8), 5) as MinutesAndSeconds,
cast(
datediff(hour, 0, DATEADD(second, OriginalSeconds, 0)) -- HoursTotal
as varchar(32))
+ ':'
+ right(LEFT(CONVERT(VARCHAR(8),DATEADD(second, OriginalSeconds, 0), 108), 8), 5) -- MinutesAndSeconds
as FinalSolutionWithoutDays
from ORIGINAL_DATA
这是结果:

再说一遍...我不知道自己是不是离开了地球,因为其他人似乎都知道他们在说什么,但是我认为如果你想将表示秒数的整数转换成小时和分钟等,你应该看到像我在这里给出的答案一样。