Sql server MSSQL-从时间中提取秒

Sql server MSSQL-从时间中提取秒,sql-server,database,Sql Server,Database,我是微软SQL Server的新手。我想从时间数据类型中提取秒 我有PostgreSQL方面的经验,我使用这个函数提取了第二个 EXTRACT(EPOCH FROM timestamp) 但在MicrosoftSQLServer中,我发现了这个函数- DATEDIFF(second, 0, timestamp) 如果时间小于24小时,我就得到第二个 但当我尝试这样的查询时 SELECT SUM(DATEDIFF(second, '0:00:00', '86:01:12')) 这给了我一个错

我是微软SQL Server的新手。我想从时间数据类型中提取秒

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

EXTRACT(EPOCH FROM timestamp)
但在MicrosoftSQLServer中,我发现了这个函数-

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小时的时间数据类型转换为秒


提前谢谢。

也许不是最好的方法,但你基本上可以把它分解成小时、分钟和秒,然后把它们加起来。如果我理解正确,您希望做的是将时间格式转换为秒

这适用于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')

我有一系列列,还需要对导出的秒数进行一些计算。有没有其他简单的方法可以做到这一点?您提供的结果确实正确,但这是我们唯一能做到的最短方法吗?@Dee我已经更新了答案-通过这种方法,您可以在数据库中引入一个函数,允许您随时调用它。例如,您可以
选择dbo.stampSeconds(column1)-dbo.stampSeconds(column2)