Sql server 将GetDate()转换为bigint
我正在使用MS SQL Server 2012 如何将Sql server 将GetDate()转换为bigint,sql-server,sql-server-2012,getdate,Sql Server,Sql Server 2012,Getdate,我正在使用MS SQL Server 2012 如何将GetDate()转换为bigint 我正在尝试获取过去24小时的记录,我唯一拥有的列是bigint(不是datetime) 我明白了 Date_and_Time 2014-06-08 05:24:22.000 2014-06-08 05:34:19.000 2014-06-08 05:57:43.000 2014-06-08 05:57:43.000 2014-06-08 17:35:59.000 您的表似乎包含历元日期,即自1970-0
GetDate()
转换为bigint
我正在尝试获取过去24小时的记录,我唯一拥有的列是bigint
(不是datetime
)
我明白了
Date_and_Time
2014-06-08 05:24:22.000
2014-06-08 05:34:19.000
2014-06-08 05:57:43.000
2014-06-08 05:57:43.000
2014-06-08 17:35:59.000
您的表似乎包含历元日期,即自1970-01-01以来的秒数。将日期时间转换为历元很容易,如下所示:
DECLARE @EpochDate bigint
SET @EpochDate = DATEDIFF(second, '1970-01-01', GETDATE())
PRINT @EpochDate
SELECT
DATEADD(SECOND, TIME_STAMP /1000 + 8*60*60, '19700101') as Date_and_Time
FROM
[dbo].[V_AGENT_SYSTEM_LOG]
WHERE
EVENT_SOURCE = 'sylink'
and EVENT_DESC LIKE '%Downloaded%'
and TIME_STAMP > DATEDIFF(second, '1970-01-01', DATEADD(day, -1, GETDATE())) * CAST(1000 as bigint)
然而,我同意marc_的观点,将日期转换为其他日期是不好的做法,但在许多情况下,如果数据是由第三方提供的,则必须这样做
我相信你的问题最终会是这样的:
DECLARE @EpochDate bigint
SET @EpochDate = DATEDIFF(second, '1970-01-01', GETDATE())
PRINT @EpochDate
SELECT
DATEADD(SECOND, TIME_STAMP /1000 + 8*60*60, '19700101') as Date_and_Time
FROM
[dbo].[V_AGENT_SYSTEM_LOG]
WHERE
EVENT_SOURCE = 'sylink'
and EVENT_DESC LIKE '%Downloaded%'
and TIME_STAMP > DATEDIFF(second, '1970-01-01', DATEADD(day, -1, GETDATE())) * CAST(1000 as bigint)
停止使用错误、不适当的数据类型!如果是日期-将其存储为
date
(如果您不需要时间)或DATETIME2(n)
(如果您需要时间)-不要将其破解为bigint
…您的数据实际上是什么样的?有可能是朱利安的约会吗?@Andrew date和时间看起来像2014-06-08 05:24:22。000@marc_s-如果我不将其破解成bigint,我将如何比较日期和时间是否在24小时内。因为Date_和Time是从Time_STAMP开始的,所以实际列是一个大整数,但由于某种原因它仍然不起作用。我理解DATEADD是当前日期减去1,即昨天的日期和时间。我知道DATEDIFF是从时间开始到昨天,如果时间戳更大,那么它在24小时内。但它仍然显示所有日期,而不是24小时内。我在where语句中添加了“*1000”,基于select语句中的值,您的time\u stamp列似乎不是1970年以来的秒,而是毫秒。当我在time\u stamp>DATEFDIFF(…末尾添加*1000时,它给出了错误“将表达式转换为数据类型int时出现算术溢出错误。”啊,当然,1000也需要是bigint,再次更新:)