gpt4 book ai didi

sql-server - MSSQL - 从时间中提取秒

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:13 25 4
gpt4 key购买 nike

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

提前致谢。

最佳答案

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

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

关于sql-server - MSSQL - 从时间中提取秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com