Sql server 2008 与SQL Server中的bigint的小时格式日期差异

Sql server 2008 与SQL Server中的bigint的小时格式日期差异,sql-server-2008,datetime,datediff,bigint,date-difference,Sql Server 2008,Datetime,Datediff,Bigint,Date Difference,我有一列包含日期和时间信息的bigint类型(如1353056515,1353067040,1360839600等) 我的要求是以小时格式获取我上面提到的列和当前日期时间之间的时差 我试图找到解决办法,但这些都太令人困惑了。我是SQL Server的新手 请帮忙。请试试这个 declare @mydate datetime DECLARE @LocalTimeOffset BIGINT ,@AdjustedLocalDatetime BIGINT SET @LocalTimeOffset

我有一列包含日期和时间信息的
bigint
类型(如
1353056515
1353067040
1360839600
等)

我的要求是以小时格式获取我上面提到的列和当前日期时间之间的时差

我试图找到解决办法,但这些都太令人困惑了。我是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时间戳,它是自1970年1月1日00:00:00 UTC以来的秒数。您可以通过一个简单的DATEDIFF从
datetime
获取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
,小数部分将被截断,对于小于1小时的差异,您将得到
0
。如果你想整小时回来,这没关系

在查询中,您可以编写如下内容:

select (DATEDIFF(s,@epoch,GETUTCDATE())-[MY_TS_COLUMN])/3600.0 AS Hours
from [MY_TABLE]

如果是日期和时间信息,为什么不能正确存储在
DATETIME
列中?这就是他们在那里的目的!另外:日期和时间是如何被“编码”成这种
bigint
格式的??这些数字代表什么?datetime格式是由我在网站上安装的插件添加的。所以我不能改变他们的格式或做任何改变。我也不知道它们是如何编码的。如果你不知道日期是如何编码的,你希望如何得到两个编码日期之间的差异?你用了什么插件?你检查过它的文件了吗?问作者他们是如何编码时间的?是UNIX时间戳吗?我用过WizIQ插件。我会联系他们以了解更多详细信息。我在前端添加了I日期(2014年11月20日上午10:00:00),在DB中显示为1416474000。当我尝试你的查询时,结果显示为393056小时。服务器上当前时间为2014-11-20 01:57:09.670时,必须少于12小时。我做错什么了吗?如果它不起作用,那么需要将列类型设置为DATETIME,这将更容易获得小时差,这不是解决方案,而是替代选项。。。