只在SQL Server中筛选我的时间where子句

问题描述:

我是SQL和编程的新手。我有一个日期时间字段,我想用它来过滤我的结果,但只在时间部分。只在SQL Server中筛选我的时间where子句

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

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

我试过这个:AND(datepart(hh,'11:02:54.107')= 7)< - 老实说,不知道我在这里做什么。

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

任何帮助,将不胜感激。

感谢,

阿卜杜勒

这应该是个窍门,它会从昨天晚上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)) 
+0

谢谢耶稣,这有助于很多,我学到了新的东西。我相信它可行,但我没有测试数据在我的开发环境中,因为它会撤回任何数据。在创建一些测试数据后将不得不测试它。 – Abdul 2015-02-17 21:58:53

+0

我测试了它,这两个表达式都会给你预期的结果。 – 2015-02-17 22:13:12

+0

嗨耶稣,这可以通过做一个case语句来完成,所以它可以在一个查询中?类似于:AND \t CASE WHEN DATEADD(day,datediff(day,0,getdate()),0)+ '18:00'= GETDATE() THEN clm.createDtTm> = DATEADD(HOUR,14,CAST DATEADD(DAY,-1,CAST(GETDATE()AS DATE))AS DATETIME)) \t \t AND \t clm.createDtTm Abdul 2015-02-18 19:52:00

我建议是这样的:

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领域这应该为你工作。

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

在MySQL的情况下,你可以这样做:

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

此查询将让你的最后两天。您可以通过用变量替换“2”来改变间隔,如果在您的情况下可能的话。