t-SQL选择今天发生的事件记录,包括午夜和时区



我有一个包含日期列和时间列的表,每当用户执行计划任务时,它就会被填充。他们通常有两个小时的时间来完成任务,而我似乎不知道如何查看今天是否完成了任务。

例如,如果现在是凌晨12:30,我需要检查它是在前一天晚上11:30完成的,还是在今天凌晨12:01完成的。我将所有的时间和日期存储为中心时间,并有一个偏移数,以便根据其他时区进行调整。

这是我卡住的地方,这适用于昨晚完成的事情,但如果它是在今天午夜之后完成的(@DatePartOfDateTime是我正在检查的日期(它已经更正了时区),@EndTime是我正在检查的时间,看看是否发生了):

select 1 from tblMedsDispensed 
    where DatePassed = 
        case when (@EndTime = '23:59' or @Offset < 0 and @EndTime < '21:59') 
             and TimePassed < '01:00' 
             -- For midnight, if the time passed is < 01:00 then roll it back a day
            then dateadd(DAY,1,@DatePartOfDateTime ) 
        else @DatePartOfDateTime  end 
        and tblMedsDispensed.patdrugs_fk = tblPatDrugs.PatDrugs_id

任何想法?

我猜一下。我认为你不需要在所有这些变量和时间分量上瞎折腾。你要做的是旋转时钟,这样你的逻辑开始与日历日一致,这样日期比较就很容易了。

select *
from tblMedsDispensed
where
    cast(dateadd(hh, @Offset - 1, DatePassed) as date) = cast('<literal date>' as date)  
编辑:我又看了一遍你的问题,我看到你有两列。这里的想法是当小时组件小于1时,将日期值向后调整一天。我还是不清楚你的容忍度是一小时还是两小时。
dateadd(
    hh,
    case when hour(dateadd(hh, @Offset, <TimeColumn>)) < 1 then -1 else 0 end,
    <DateColumn>
)

最新更新