比较 ASP.NET 中的两个时间列

Posted

技术标签:

【中文标题】比较 ASP.NET 中的两个时间列【英文标题】:Comparing two time columns in ASP.NET 【发布时间】:2012-12-01 15:30:52 【问题描述】:

我对 ASP.NET 和 SQL 比较陌生,所以我很难弄清楚如何比较两个时间列。我在 .mdb 数据库中有一个带时间戳的列,然后是一个 Now() 列。我需要一个 gridview 显示时间戳中“大于或等于 3 小时”的记录。知道我该怎么做吗?

【问题讨论】:

何时使用日期时间或时间戳是HERE 【参考方案1】:

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

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

答案是:没有

您需要另一列datetime2 类型并使用> 运算符进行比较。您可能希望设置默认值 getutcdate() 以在插入每一行时设置它。

更新:

由于该列是datetime 类型而不是timestamp 类型(SQL Server 中有一个类型称为timestamp,因此会造成混淆)你可以这样做

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

确保您的服务器与您的代码在同一时区运行。以 UTC 格式存储所有日期可能更安全。在这种情况下使用GETUTCDATE 而不是GETDATE

【讨论】:

感谢您的回复。不过,我不确定我是否理解您的回复。让我更好地解释我正在发生的事情。我有一个 .mdb 文件,我需要比较一个带有 Now() 函数时间戳的列。我正在数据库中输入记录,并使用 Now() 函数为“TimeCalled”列添加时间戳,以便输入该记录。然后,我需要在网格视图或列表视图中显示 3 小时或更早的所有记录。此列是“日期/时间”数据类型。我将如何编写 SQL 语句来选择那些早于 3 小时或更长时间的记录? 再次感谢您的快速回复!我现在就试一试!我不确定如何准确使用 DATEADD 函数。再次抱歉造成混乱! >= 更改为 <=,因为我认为您想要过去 3 小时内的记录。 当我尝试在 Visual Studio 2010 中执行该查询时,我收到以下错误:错误源:Microsoft Jet 数据库引擎,错误消息:表达式中未定义函数“GETDATE”。 哦,您正在使用 Access,抱歉。您需要将其作为参数传递。只需传递Now()的值【参考方案2】:

时间戳通常用于跟踪记录的更改,并在每次记录更改时更新。如果要存储特定值,则应使用日期时间字段。

如果您使用的是 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')

【讨论】:

何时使用日期时间或时间戳是HERE 感谢您的回复,是的,我想我误用了“时间戳”这个词。我将其用作一般术语,而不是实际的时间戳功能。我在插入记录时使用了 Now() 函数。因此,它只是捕捉插入记录的时间,问题是我现在需要检查表中是否有超过 3 小时的记录。 如果您使用的是 DateTime 列并且希望在 TSQL 中得到结果,请尝试 DATEDIFF(Hour, 'Your DateTime Column here', 'pass Now() here' ) 我正在使用 Visual Studio 2010 并且正在使用 asp.net。所以我试图用超过 3 小时的记录填充网格视图。我将如何使用 SELECT 语句来做到这一点?我不是一个非常高级的程序员,所以一步一步的指导会很棒,谢谢!

以上是关于比较 ASP.NET 中的两个时间列的主要内容,如果未能解决你的问题,请参考以下文章

通过asp.net中的数据表在asp gridview中添加按钮列

在 asp.net 中的多个页面上打印具有许多列标题的 Datagrid 表

有谁比较了解Asp.net(C#)中的loginview login 、CreatUserWizard这三个控件的?跪求大神

如何使用自动生成的列隐藏 ASP.NET GridView 中的列?

ASP.NET中的<%%>介绍

如何使用 LINQ 将空值发送到 ASP.NET 中的非空列