我是SQL和编程的新手。我有一个日期时间字段,我想用它来过滤我的结果,但仅限于时间部分。
例如,我需要从昨天下午2点到当天早上7点运行报告。我无法对日期进行硬编码,因为此报告需要每天运行。此查询将自动从存储过程运行。
我试过AND clm.createDtTm> DATEADD(d,-1,GETDATE()),它返回一天但不是我需要的时间范围。
我试过这个:AND(datepart(hh,'11:02:54.107')= 7)< - 说实话,甚至不确定我在这里做什么。
我不确定这是否可能,但如果我能在一天后得到结果,我假设必须有一种方法可以在几小时之间缩小那一天。
任何帮助都将不胜感激。
谢谢,
阿都
答案 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”,则可以改变间隔。