bigint字段中的日期时间

时间:2009-09-28 16:28:09

标签: c# asp.net sql sql-server

我正在尝试将一个日期时间添加到bigint字段,然后使用SQL查询在gridview中显示它... 首先我不知道如何在big int字段中添加日期时间

所以即时使用

long s= DateTime.Now.Ticks;

存储样本值,如633896886277130000

然后我希望只使用SQl Select语句从中获取日期并在gridview上显示..

SELECT MachineGroups.MachineGroupID, MachineGroups.MachineGroupName,
   MachineGroups.MachineGroupDesc, **MachineGroups.TimeAdded**,
   MachineGroups.CanBeDeleted, COUNT(Machines.MachineName) AS 'No. of PCs'
FROM MachineGroups
FULL OUTER JOIN Machines ON Machines.MachineGroupID = MachineGroups.MachineGroupID
GROUP BY MachineGroups.MachineGroupID, MachineGroups.MachineGroupName,
   MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, MachineGroups.CanBeDeleted" 

我可以用这个

吗?
SELECT CONVERT(BIGINT, DATEDIFF(SECOND, '1970-01-01T00:00:00',
'2008-05-20T06:00:00'));

long TimeAdded =(DateTime.Now.ToFileTime() - 116444736000000000)/ 10000000; 我得到这个价值 1254157826

4 个答案:

答案 0 :(得分:1)

我建议你只在你的asp.net代码中获取数据,然后将其转换为你想要的任何格式。

答案 1 :(得分:0)

在第一个示例中,您正在存储刻度线,然后看起来您正在将它们转换回第二个示例中,就好像它们是秒,这将是远离的。你必须将它们视为刻度或秒,但不是两者。如果您具有灵活性并且不需要增加精度,我想秒可以更容易使用。此外,它看起来不像SQL Server支持Ticks,所以如果你需要这种精度级别,你需要将它转换为毫秒,或者那种性质的东西。

然后,您将使用以下方式转换回来:

SELECT DATEADD(seconds, YourValueFromTable, CONVERT(DATETIME, 0))

显然,如果您没有使用秒,请替换相应的关键字。

答案 2 :(得分:0)

1秒是10,000,000个刻度。如果你想在应用程序中使用ticks,你需要删除“T”和倍数10,000,000:

SELECT CONVERT(BIGINT, DATEDIFF(SECOND, '1970-01-01 00:00:00',
'2008-05-20 06:00:00'))*10000000

答案 3 :(得分:0)

如果要在MachineGroups.TimeAdded字段中保存.NET Ticks,则可以将其转换为SQL DateTime,如下所示。 (减去1900-01-01的蜱并按天数除以)

选择转换(datetime,(MachineGroups.TimeAdded - 599266080000000000)/ 864000000000) 来自MachineGroups

如果您只想使用日期,请使用FLOOR:

选择转换(datetime,FLOOR((MachineGroups.TimeAdded - 599266080000000000)/ 864000000000)) 来自MachineGroups

编辑如果滴答无效,您将收到错误,您可以将其用于错误检查:

选择CASE WHEN MachineGroups.TimeAdded< 599266080000000000 THEN null ELSE convert(datetime,(MachineGroups.TimeAdded - 599266080000000000)/ 864000000000)END 来自MachineGroups