MSSQL - 从时间上提取第二

时间:2014-11-10 09:10:10

标签: sql-server database

我是Microsoft SQL Server的新手。我想从时间数据类型中提取第二个。

我有PostgreSQL的经验,我使用这个函数提取第二个。

EXTRACT(EPOCH FROM timestamp)

但在Microsoft SQL Server中,我发现了这个功能 -

DATEDIFF(second, 0, timestamp)

如果时间少于24小时,那就给我第二​​个。

但是当我尝试这样的查询时。

SELECT SUM(DATEDIFF(second, '0:00:00', '86:01:12'))

它给我一个错误。

Conversion failed when converting date and/or time from character string

从星期六搜索解决方案但找不到它。

有人帮助我,如何将时间数据类型转换为大于24小时的秒数。

提前致谢。

1 个答案:

答案 0 :(得分:0)

也许不是最好的方法,但你基本上可以将其分解为小时,分钟和秒,然后将它们全部添加。如果我理解你想要做的就是将时间格式转换为秒。

这适用于2008 R2

DECLARE @inputTime AS VARCHAR(10) = '86:01:12'

DECLARE @timeSec AS INT = SUBSTRING(@inputTime,1,2) * 3600 + SUBSTRING(@inputTime,4,2) * 60 + SUBSTRING(@inputTime,7,2) 

PRINT @timeSec

您可以将其作为一行代码,将其嵌套在任何查询中:

SELECT SUBSTRING('86:01:12',1,2) * 3600 + SUBSTRING('86:01:12',4,2) * 60 + SUBSTRING('86:01:12',7,2)

正如你所看到的,它会将它视为一个字符串,将前两个字符作为小时,乘以3600(一分钟60秒*​​一小时60分钟)。接下来取几分钟并将它们乘以60(一分钟内60秒),最后加上秒数,这是* 1,因为这是你要找的分辨率。

为了便于使用,您可以创建一个函数,然后使用它来减少代码的混乱:

CREATE FUNCTION dbo.stampSeconds (@inputTime VARCHAR(10))
RETURNS INT
AS BEGIN

    DECLARE @timeSec AS INT = SUBSTRING(@inputTime,1,2) * 3600 + SUBSTRING(@inputTime,4,2) * 60 + SUBSTRING(@inputTime,7,2) 

    RETURN @timeSec

END

然后您可以使用:

SELECT dbo.stampSeconds ('29:07:01')