查找过去一小时内生成的记录

时间:2010-06-08 16:45:04

标签: tsql

创建记录时,我有一个名为smalldatetime的{​​{1}}字段。我需要选择在过去一小时内创建的记录的语法。

认为它会是:

myTime

其中and DATEDIFF("hh", datePart(hh, myTime), DatePart(hh, GETDATE()) < 1

  1. 查找数小时
  2. 查看myTime中数据的小时部分作为开​​始
  3. 查看现在的小时部分以结束
  4. 生成一个与'1'进行比较的int
  5. 我得到的结果很明显,但我不知道为什么。

    ADDENDUM:由于这两个答案基本上都是一致的,因此不会为我返回任何内容这一事实必须追溯到我的表格是如何创建的。它是由LogParser针对IIS日志创建的,并且日期/时间信息分布在2个不同的字段中。 datediff仅包含今日记录的日期信息:Date,时间字段如下:2010-06-08 00:00:00.000(所有记录的日期部分为01年1月1日)。

4 个答案:

答案 0 :(得分:30)

使用此:

SELECT  *
FROM    Whatever
WHERE   myTime > DATEADD(HOUR, -1, GETDATE())

答案 1 :(得分:2)

使用SELECT * FROM YourTable WHERE YourDateTime&gt; = DATEADD(hh,-1,GETDATE())

答案 2 :(得分:2)

如果您想要整个小时,请使用以下内容...

--This Hour
SELECT  *
FROM    Whatever
WHERE   myTime >= dateadd(hour, datediff(hour, 0, GETDATE()), 0)

--Last Hour
SELECT  *
FROM    Whatever
WHERE   myTime  < dateadd(hour, datediff(hour, 0, GETDATE()), 0) AND  myTime >= dateadd(hour, datediff(hour, 0,  DATEADD(HOUR, -1, GETDATE())), 0)

--Hour before last
SELECT  *
FROM    Whatever
WHERE   myTime < dateadd(hour, datediff(hour, 0,  DATEADD(HOUR, -1, GETDATE())), 0) AND  myTime >= dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -2, GETDATE())), 0)

答案 3 :(得分:0)

虽然这个WHERE myTime > DATEADD(HOUR, -1, GETDATE())应该对我有用,但由于一些奇怪的原因,我的sql server中的datetime feild是以一种奇怪的方式配置的,上面的代码将返回整天,而不仅仅是在Now之前的一小时。经过一些故障排除后,我发现GETDATE()实际上比当前时间提前了7个小时,所以我的查询看起来像这样:

WHERE myTime BETWEEN DATEADD(HH, 6, GETDATE()) AND DATEADD(HH, 7, GETDATE())

所以DATEADD(HH,7,GETDATE()现在加上7个小时(根据数据库得出当前时间)。然后减去一个小时以获得该小时块内的所有行。我想我应该发布此信息只是为了帮助任何人遇到同样的问题。