我有一列bigint
包含日期和时间信息的类型(如1353056515
,1353067040
等1360839600
)
我的要求是在我上面提到的列和当前日期时间之间获得 HOURS 格式的时间差。
我试图找到解决方案,但那些太令人困惑了。我是 SQL Server 的新手。
请帮忙。
我有一列bigint
包含日期和时间信息的类型(如1353056515
,1353067040
等1360839600
)
我的要求是在我上面提到的列和当前日期时间之间获得 HOURS 格式的时间差。
我试图找到解决方案,但那些太令人困惑了。我是 SQL Server 的新手。
请帮忙。
请试试这个。
declare @mydate datetime
DECLARE @LocalTimeOffset BIGINT
,@AdjustedLocalDatetime BIGINT
SET @LocalTimeOffset = DATEDIFF(second,GETDATE(),GETUTCDATE())
SET @AdjustedLocalDatetime = 1416474000 - @LocalTimeOffset
SELECT DATEADD(second,@AdjustedLocalDatetime, CAST('1970-01-01 00:00:00' AS datetime))
-- It will give you date 2014-11-20 14:30:00.000
数据差分操作:
select DATEDIFF(hour,@mydate,GETDATE())
或者
创建函数
create FUNCTION dbo.fn_ConvertToDateTime (@Datetime BIGINT)
RETURNS DATETIME
AS
BEGIN
DECLARE @mydate datetime
DECLARE @LocalTimeOffset BIGINT
,@AdjustedLocalDatetime BIGINT
SET @LocalTimeOffset = DATEDIFF(second,GETDATE(),GETUTCDATE())
SET @AdjustedLocalDatetime = @Datetime - @LocalTimeOffset
SELECT @mydate=DATEADD(second,@AdjustedLocalDatetime, CAST('1970-01-01 00:00:00' AS datetime))
return @mydate
END;
GO
select mydate= dbo.fn_ConvertToDateTime (1416474000)
select DATEDIFF(hour,@mydate,GETDATE())
希望有帮助。
该数字看起来像一个 UNIX 时间戳,它是自 1/1/1970 00:00:00 UTC 以来的秒数。datetime
您可以使用简单的 DATEDIFF从 a 中获取 UNIX 时间戳:
declare @date datetime='2014-11-20T10:00:00'
declare @epoch datetime='19700101'
select DATEDIFF(s,@epoch,@date)
要获得两个时间戳之间的小时数,您只需将差除以 3600(一小时的秒数)。在计算差异之前,您不需要将时间戳转换为日期:
declare @dateTS int=DATEDIFF(s,@epoch,@date)
declare @nowTS int=DATEDIFF(s,@epoch,GETUTCDATE())
select (@nowTS-@dateTS)/3600.0
请注意,我曾经3600.0
得到十进制结果。如果3600
使用小数部分将被截断,您将获得0
少于 1 小时的差异。如果您想返回整个小时,这是可以的。
在查询中,您可以编写如下内容:
select (DATEDIFF(s,@epoch,GETUTCDATE())-[MY_TS_COLUMN])/3600.0 AS Hours
from [MY_TABLE]