只在SQL Server where子句中过滤我的时间

时间:2015-02-17 20:55:35

标签: sql-server datetime where-clause

我是SQL和编程的新手。我有一个日期时间字段,我想用它来过滤我的结果,但仅限于时间部分。

例如,我需要从昨天下午2点到当天早上7点运行报告。我无法对日期进行硬编码,因为此报告需要每天运行。此查询将自动从存储过程运行。

我试过AND clm.createDtTm> DATEADD(d,-1,GETDATE()),它返回一天但不是我需要的时间范围。

我试过这个:AND(datepart(hh,'11:02:54.107')= 7)< - 说实话,甚至不确定我在这里做什么。

我不确定这是否可能,但如果我能在一天后得到结果,我假设必须有一种方法可以在几小时之间缩小那一天。

任何帮助都将不胜感激。

谢谢,

阿都

3 个答案:

答案 0 :(得分:1)

这应该可以解决问题,它会从昨天晚上7点到今天早上7点过滤掉不属于日期间隔的行。

WHERE
    createDtTm >= DATEADD(HOUR, 14,CAST(DATEADD(DAY,-1, CAST(GETDATE() AS DATE)) AS DATETIME))
    AND createDtTm <= DATEADD(HOUR, 7, CAST(CAST(GETDATE() AS DATE) AS DATETIME))

答案 1 :(得分:0)

我建议这样的事情:

SELECT(DATEADD(d,-1,GETDATE()))
  FROM table
 WHERE (DATEADD(d,-1,GETDATE())) = rowloadtimestamp
HAVING DATEPART(HH,rowloadtimestamp) BETWEEN 13 AND 24

UNION

SELECT GETDATE()
  FROM table
 WHERE GETDATE() = rowloadtimestamp
HAVING DATEPART(HH,GETDATE()) BETWEEN 1 AND 7

假设你有一个rowloadtimestamp字段,这应该适合你。

答案 2 :(得分:0)

“我不能硬编码日期”是什么意思?你的意思是时间间隔是可变的,还是固定的,或者你指的是确切的日期?我不确定我理解。

如果是MySQL,您可以执行以下操作:

SELECT data, date FROM table WHERE date < DATE_SUB(NOW(), INTERVAL 2 DAY);

此查询将为您提供最近两天的信息。如果在您的情况下可以使用变量替换“2”,则可以改变间隔。