我是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小时的秒数。
提前致谢。
答案 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')