我正在尝试将一个日期时间添加到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
答案 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