Only filter my time in SQL Server where 子句

Only filter my time in SQL Server where clause

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

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

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

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

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

如有任何帮助,我们将不胜感激。

谢谢,

阿卜杜勒

我建议这样:

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 字段,这应该适合您。

这应该可以解决问题,它会过滤掉不在从昨天晚上 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))

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

在 MySQL 的情况下,您可以执行以下操作:

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

此查询将为您提供过去两天的信息。如果您的情况可行,您可以通过用变量替换“2”来改变间隔。