【问题标题】:Using DATEPART for AM works correctly but does not work for PM query将 DATEPART 用于 AM 可以正常工作,但不适用于 PM 查询
【发布时间】:2012-11-07 13:01:10
【问题描述】:

我正在使用查询为我们的第三班人员提取报告。

当报告以 0 个结果邮寄时,我刚刚注意到的问题是,我现在将其设置为从下午 6 点运行到第二天早上 5:59。由于我有日期字段 = GETDATE,因此它看不到前一天晚上 (1800-2359) 的结果。我想把这个从-12小时拉出来,但可以随时按下按钮来查看结果。

因此,如果他们在班次结束前推送它,它将显示一些第一班次条目。我希望它只在第二天早上从 1800-0559 运行,无论是在午夜之前还是在午夜之后按下按钮。我希望这是有道理的。我什至不确定在击中 2359 后中间是否识别到 00。我已将其内置到 VB.net 应用程序中,他们可以随时按下按钮以获得结果。这是为了让管理层跟踪正在做的事情,因为员工需要在问题发生时实时输入数据。

感谢您的帮助。希望我有足够的意义! :D

SELECT 
   Assignment, Datemodified, General, 
   IncNumber, NextSteps, PDCRStatus, 
   RootCause, Status, Summary, 
   Timings, UserID 
FROM 
   Turnover 
WHERE DATEPART(HOUR, datemodified) between 18 and 05 
AND CONVERT(NVARCHAR(50),datemodified,103) = CONVERT(NVARCHAR(50),GETDATE(),103);

【问题讨论】:

  • 一个数如何大于(或等于)18 且小于(或等于)5?

标签: sql sql-server datepart


【解决方案1】:

我猜当您检查特定时间范围时,日期会随时间变化,即一天的 1800 小时到下一天的 0500 小时。 我看到您的查询仅检查时间,但不考虑日期。 我想如果你可以一起检查日期和时间,它应该可以工作。 到目前为止,我的机器上没有 sql server,否则会帮助您进行示例查询。

干杯, 希望对您有所帮助!

【讨论】:

  • 那么日期是用 = GETDATE 来考虑的,但是如果我的查询在 2359 之后运行,它会给出任何结果,因为它只查看该日期,而不是前一天的 6 小时。跨度>
【解决方案2】:

我假设您想要从昨天 18:00 开始的所有数据。

SELECT 
   Assignment, Datemodified, General, 
   IncNumber, NextSteps, PDCRStatus, 
   RootCause, Status, Summary, 
   Timings, UserID 
FROM 
   Turnover 
WHERE datemodified >= dateadd(HH,-6,convert(datetime,convert(date,GETDATE())))

我正在使用 getdate 获取当前日期时间并提取日期。将其转换回日期时间时,我有 00:00,所以我用 dateadd 减去 6 小时,因此选择昨天 18:00。但是我不知道这在某些时间应该如何表现。它总是会转到 昨天 18:00,这意味着当您在 23:59 开始时,您会看到 29 小时 59 分钟的间隔。在 00:00 开始时,您将看到 6 小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多