【发布时间】:2014-10-28 17:45:34
【问题描述】:
我有一个每 30 分钟运行一次的脚本,它运行一个查询以查找前 30 分钟内的新记录。为了解决脚本运行的任何类型的延迟,我想查看之前的 0:00-30:00 分钟和 30:01-59:59 块。
例如,如果我的脚本在上午 11:00 运行,我希望它能够找到具有
的新行entered_date > 10:30 am AND < 11:00 am
当它在上午 11:30 运行时,我希望从 `entered_date > 11:00am AND
做这样的事情只会得到最后运行 30 分钟:
SELECT
fa.entered_date,
fa.text
FROM
form_answers fa
WHERE
AND fa.value = 1
AND fa.entered_date >= DATEADD(mi, -30, GETDATE())
因此,如果我的脚本以某种方式延迟了几秒钟,并在 11:00:02 运行,我可能会错过 entered_date 为 10:30:01 的记录。
编辑:
这就是最终对我有用的东西:
fa.entered_date BETWEEN
DATEADD(mi,-30,CONVERT(VARCHAR(19),DATEADD(mi, DATEDIFF(mi, 0, GETDATE())/30*30, 0)))
AND
DATEADD(mi, DATEDIFF(mi, 0, GETDATE())/30*30, 0)
【问题讨论】:
标签: sql sql-server sql-server-2008-r2 datediff dateadd