为什么我的查询在任何情况下都不起作用?

时间:2017-03-01 16:01:48

标签: sql sql-server tsql sql-server-2012

我写了一个查询,选择那些OPENING TIME大于当前时间的记录,并且OPENING DATE和当前日期之间的日期差异应该是< = 3且> = 0,实际上是为了通知弹出窗口的目的告诉你哪些工作在3天内开放。一旦打开,就不应该选择任何记录,即日期差异为0,当前时间大于上述开放时间。

现在我的查询在某些情况下有效,例如选择< = 3和> = 0的记录,但如果当前时间超过任何一天的开放时间则不会。由于我使用了AND运算符,因此失败,即如果Opening Time为14:00,当前时间为14:01,那么< = 3和> = 0也会失败。

我的查询:

concurrent.futures

1 个答案:

答案 0 :(得分:0)

不要尝试将日期和时间用作单独的字段,最好将它们放在一起,只使用 datetime 数据类型。我已从您的架构中删除了OpeningTime字段,并将OpeningDate用作日期时间。

create table Works (
    NIT_No int,
    WorkNO int,
    WorkName varchar(32),
    OpeningDate datetime
)

以下是我使用的一些示例数据:

+ ------ + ------- + -------- + ----------------------- +
| NIT_No | Work_No | WorkName | OpeningDate             |
+ ------ + ------- + -------- + ----------------------- +
| 1      | 1       | Work1    | 2017-02-26 16:21:15.083 |
| 2      | 2       | Work2    | 2017-02-27 09:21:15.083 |
| 2      | 3       | Work3    | 2017-03-01 00:21:15.083 |
| 3      | 4       | Work4    | 2017-03-01 13:09:15.083 |
| 4      | 5       | Work5    | 2017-03-02 13:21:15.083 |
| 5      | 6       | Work6    | 2017-03-03 17:21:15.083 |
| 5      | 7       | Work7    | 2017-03-04 11:45:15.083 | 
| 5      | 8       | Work8    | 2017-03-04 19:21:15.083 |
+ ------ + ------- + -------- + ----------------------- +

您希望在getdate之前保留任何开放日期的记录,并且到_____ 不到三天。在这里我们填补空白。您是否关心准确小时分钟?这取决于您,可能取决于您的应用程序。我打算用分钟。所以我希望在距离getdate 0到3 * 24 * 60分钟之间加入日期。以下查询就是这样做的

Select  @NotificationAllowed as IsAllowed,
        NIT_No,
        WorkNo,
        WorkName,
        DATEDIFF(day, GETDATE(), OpeningDate) as TotalDaysRemaining,
        OpeningDate as OpeningDate
    from #Works
    Where DATEDIFF(Minute, GETDATE(), OpeningDate) between 0 and 3*24*60

在2017年3月1日下午12:35运行时,我得到以下结果

+ ------ + ------- + -------- + --- + ----------------------- +
| NIT_No | Work_No | WorkName | TDR | OpeningDate             |
+ ------ + ------- + -------- + --- + ----------------------- +
| 3      | 4       | Work4    | 0   | 2017-03-01 13:09:15.083 |
| 4      | 5       | Work5    | 1   | 2017-03-02 13:21:15.083 |
| 5      | 6       | Work6    | 2   | 2017-03-03 17:21:15.083 |
| 5      | 7       | Work7    | 3   | 2017-03-04 11:45:15.083 | 
+ ------ + ------- + -------- + --- + ----------------------- +

您所要做的就是包括逻辑程序流和Organization_ID的额外过滤器。