只在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))
答
我建议是这样的:
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”来改变间隔,如果在您的情况下可能的话。
谢谢耶稣,这有助于很多,我学到了新的东西。我相信它可行,但我没有测试数据在我的开发环境中,因为它会撤回任何数据。在创建一些测试数据后将不得不测试它。 – Abdul 2015-02-17 21:58:53
我测试了它,这两个表达式都会给你预期的结果。 – 2015-02-17 22:13:12
嗨耶稣,这可以通过做一个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