【问题标题】:How to query for a specific date range excluding a specific time range如何查询不包括特定时间范围的特定日期范围
【发布时间】:2012-08-09 17:08:27
【问题描述】:

我有一个使用 Windows 调度程序自动运行的程序。该程序所做的是运行“昨天”结果的查询......然后过滤结果,不包括特定时间范围内的任何内容。我现在遇到的问题是我必须在查询中指定日期...如何让查询自动排除时间(早上 5:30 到早上 6:15)

SELECT  Store_Id, DM_Corp_Received_Date
FROM    Register_Till_Count_Tb
WHERE   (DM_Corp_Received_Date >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0)) 
    AND (Register_Transaction_Type = 'sod') 
    AND (DM_Corp_Received_Date < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)) 
    AND (DM_Corp_Received_Date NOT BETWEEN CONVERT(datetime, '2012-08-08 05:30:00', 102) AND CONVERT(Datetime, '2012-08-08 06:15:00', 102))

【问题讨论】:

  • 这看起来与您之前的帖子 stackoverflow.com/questions/11886769/… 非常相似(除了您现在使用 DM_Corp_Received_Date 而不是 Register_Till_Count_Datetime。
  • @HolgerBrandt 你是对的。这是并且已经得到解决。我最初认为它是存储过程中的东西,并且正在寻找查询而不是存储过程......我很高兴。谢谢。

标签: sql sql-server vb.net datetime


【解决方案1】:
DECLARE @Yesterday DATETIME = DATEADD(day, DATEDIFF(day, 0, GETDATE()) - 1, 0));
DECLARE @Today DATETIME = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0));

SELECT  Store_Id, DM_Corp_Received_Date
FROM    Register_Till_Count_Tb
WHERE   (DM_Corp_Received_Date >= @Yesterday
    AND (Register_Transaction_Type = 'sod') 
    AND (DM_Corp_Received_Date < @Today
    AND (DM_Corp_Received_Date NOT BETWEEN DATEADD(minute, 5*60+30, @Yesterday) AND   
         DATEADD(minute, 6*60+15, @Yesterday))

请注意,BETWEEN 具有包容性,因此请注意边界。

【讨论】:

  • 谢谢,我添加了一个说明。
  • @Shmewnix 。 . .这真的有效吗?它看起来像是重新格式化原始查询的更好方法。但是,它可以解决您的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多