sql-server SQL筛选时间范围(含时区转换值)

nwwlzxa7  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(221)

我正在尝试在时间范围内过滤一个数据库。我写了下面这样的东西。

WHERE
    CAST(DateTimeColumn AS TIME) BETWEEN CAST(@StartTime AS TIME) 
                                     AND CAST(@EndTime AS TIME)

这是正常工作的,但是当参数从时区转换时会出现问题。例如,我将默认时间设置为12:00 am到11:59 pm,以覆盖23:59小时的范围。当这些参数从新加坡时区转换为UTC时间时,它变成了04:00 pm到03:59 pm。因此,覆盖-1分钟的时间范围,或者在代码中它变成了。

WHERE 
     CAST(DateTimeColumn AS TIME) BETWEEN 04:00pm AND 03:59pm

上面的代码将不会返回任何内容,因为它搜索的是负时间范围。
我已经搜索并了解到我可以使用NOT BETWEENCASE来适应所有不同的时区。有没有更简单的方法来使其工作,而不必为每个可能的时区编写CASE语句?

k10s72fa

k10s72fa1#

这是你要找的吗?
1.如果@StartTime小于@EndTime,则检查色谱柱时间是否介于@StartTime@EndTime之间
1.如果@StartTime大于@EndTime,则检查色谱柱时间是否大于@StartTime或小于@EndTime

(@StartTime < @EndTime AND CAST(DateTimeColumn AS TIME) BETWEEN @StartTime AND @EndTime)
OR (@StartTime > @EndTime AND (CAST(DateTimeColumn AS TIME) >= @StartTime OR CAST(DateTimeColumn AS TIME) <= @EndTime))

相关问题