Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将GetDate()转换为bigint_Sql Server_Sql Server 2012_Getdate - Fatal编程技术网

Sql server 将GetDate()转换为bigint

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

我正在使用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-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,再次更新:)