2012-12-13 54 views
2

我对ASP.NET和SQL比较陌生,所以我很难找出如何比较两个时间列。我有一个时间戳列,然后在.mdb数据库中有一个Now()列。我需要从时间戳中获得一个gridview显示“大于或等于3小时”的记录。任何想法我可以做到这一点?比较ASP.NET中的两个时间列

+2

当使用日期时间或时间戳[HERE ](http://stackoverflow.com/questions/5989539/when-to-use-datetime-or-timestamp) – Alaa

回答

0

Transact-SQL时间戳记数据类型是一种二进制数据类型,没有与时间相关的值。

所以要回答你的问题:有没有办法从时间戳类型列中获取日期时间值?

答案是:没有

你需要datetime2类型的另一列,并使用>运营商来进行比较。您可能需要设置默认值getutcdate()以在插入每行时进行设置。

UPDATE:

由于列是datetime型的,而不是timestamp类型(有SQL Server中的类型,称为timestamp,因此混乱),你可以做

WHERE [TimeCalled] <= DATEADD(hour, -3, GETDATE())

制作确定你的服务器和你的代码在同一时区运行。以UTC存储所有日期可能更安全。在这种情况下,请使用GETUTCDATE代替GETDATE

+0

谢谢你的回复。不过,我不确定我是否理解你的回复。让我更好地解释我正在做什么。我有一个.mdb文件,我需要比较一个使用Now()函数获得时间戳的列。我在数据库中输入记录,并使用Now()函数为输入该记录时的“TimeCalled”列添加时间戳。然后我需要在gridview或listview中显示所有3小时或更长时间的记录。此列是“日期/时间”数据类型。如何编写SQL语句来选择那些3小时或更长的记录? –

+0

再次感谢您的快速回复!我现在就给这个镜头吧!我不确定如何使用DATEADD函数。对不起,再次感到困惑! –

+0

将'> ='更改为'<=',因为我认为您最近3小时内想要记录。 –

0

时间戳通常用于跟踪对记录的更改,并且每次记录更改时都会更新。如果你想存储一个特定的值,你应该使用日期时间字段。

如果您使用的是DATETIME列和你想要的结果TSQL尝试

DATEDIFF(Hour, 'Your DateTime Column here', 'pass Now() here') 

尝试在TSQL执行这个例子:

select DATEDIFF(Hour, '2012-11-10 00:00:59.900', '2012-11-10 05:01:00.100') 
+0

何时使用日期时间或时间戳是[这里](http://stackoverflow.com/questions/5989539/when-to-use-datetime-or-time-时间戳) – Alaa

+0

谢谢你的回复,是的,我想我误用了短期“时间戳”。我用它作为一个通用术语,而不是实际的时间戳功能。插入记录时我使用了Now()函数。因此,它只是捕获插入记录的时间,问题是我现在需要检查表格以查找3小时以前的记录。 –

+0

如果您使用的是日期时间列,并且您希望TSQL中的结果尝试使用'DATEDIFF(小时,'您的日期时间列','立即传递()')' – Alaa