如何确定getDate()是否在2个时间戳(7)之间?

时间:2017-04-02 21:36:24

标签: sql sql-server tsql

我有一个应用程序,如果温度超过限制就发送警报,但我只想在一天中的某些时间发送警报。我正在使用time(7)数据类型来存储这些时间。我需要它足够灵活以跨越午夜,所以我可以有以下时间:

time_on   time_off
08:00:00  17:00:00
00:00:00  12:00:00
21:00:00  09:00:00

如何确定CONVERT(time(7),getdate())是否介于这些组合之间?

2 个答案:

答案 0 :(得分:1)

您可以将TIME添加到日期时间值。在这里,我们通过Declare @D datetime = convert(date,GetDate())

将当前的GetDate()截断为午夜
Declare @YourTable table (time_on time,time_off time)
Insert Into @YourTable values
('08:00:00','17:00:00'), 
('00:00:00','12:00:00'),
('21:00:00','09:00:00'),
('00:00:00','12:00:00'),   -- Added for illustration
('12:00:00','00:00:00')    -- Added for illustration


Declare @D datetime = convert(date,GetDate())

Select *
 From  @YourTable
 Where GetDate() >= @D+convert(datetime,time_on)
   and GetDate() <= @D+convert(datetime,time_off)+case when time_off<=time_on then 1 else 0 end

<强>返回

time_on             time_off
12:00:00.0000000    00:00:00.0000000

我当前的日期时间是2017-04-02 18:33:53.803,不符合任何原始标准,所以我添加了两条记录用于说明

或者,如果您不想申报 @D

Select *
 From  @YourTable
 Where GetDate() >= convert(datetime,convert(date,GetDate()))+convert(datetime,time_on)
   and GetDate() <= convert(datetime,convert(date,GetDate()))+convert(datetime,time_off)+case when time_off<=time_on then 1 else 0 end

答案 1 :(得分:1)

你可以这样做:

  public static boolean increasingArray(int[][] a) {

        for (var i = 0; i < a.length; i++) {
         for(int row = 0; row< a.length row > previous)
         for(int col= 0; col< a.length col > previous)
          return true;
        }

这会处理您的表格的问题,这段时间包括午夜。