【发布时间】:2012-12-01 15:30:52
【问题描述】:
我对 ASP.NET 和 SQL 比较陌生,所以我很难弄清楚如何比较两个时间列。我在 .mdb 数据库中有一个带时间戳的列,然后是一个 Now() 列。我需要一个 gridview 显示时间戳中“大于或等于 3 小时”的记录。知道我该怎么做吗?
【问题讨论】:
-
何时使用日期时间或时间戳是HERE
标签: tsql
我对 ASP.NET 和 SQL 比较陌生,所以我很难弄清楚如何比较两个时间列。我在 .mdb 数据库中有一个带时间戳的列,然后是一个 Now() 列。我需要一个 gridview 显示时间戳中“大于或等于 3 小时”的记录。知道我该怎么做吗?
【问题讨论】:
标签: tsql
Transact-SQL 时间戳数据类型是没有时间相关值的二进制数据类型。
所以回答你的问题:有没有办法从时间戳类型列中获取 DateTime 值?
答案是:没有
您需要另一列datetime2 类型并使用> 运算符进行比较。您可能希望设置默认值 getutcdate() 以在插入每一行时设置它。
更新:
由于该列是datetime 类型而不是timestamp 类型(SQL Server 中有一个类型称为timestamp,因此会造成混淆)你可以这样做
WHERE [TimeCalled] <= DATEADD(hour, -3, GETDATE())
确保您的服务器与您的代码在同一时区运行。以 UTC 格式存储所有日期可能更安全。在这种情况下使用GETUTCDATE 而不是GETDATE
【讨论】:
>= 更改为 <=,因为我认为您想要过去 3 小时内的记录。
Now()的值
时间戳通常用于跟踪记录的更改,并在每次记录更改时更新。如果要存储特定值,则应使用日期时间字段。
如果您使用的是 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')
【讨论】:
DATEDIFF(Hour, 'Your DateTime Column here', 'pass Now() here' )