Запрос даты в SQL2008 - PullRequest
       3

Запрос даты в SQL2008

1 голос
/ 12 августа 2010

У меня есть следующие записи, изображающие смены в таблице смен.

ID, Description, Start Time, End Time
1, Morning, 06:00, 13:59
2, Afternoon, 14:00, 21:59
3, Night, 22:00, 05:59

Теперь мне нужно, чтобы смена соответствовала прошедшему времени, но я застрял с получением записи для ночной смены, где время начинается до полуночи и заканчивается на следующий день.

Какой самый простой способ запросить эту таблицу, чтобы получить правильный сдвиг на основе прошедшего времени?

TIA - Майк

Ответы [ 3 ]

1 голос
/ 12 августа 2010

Типы времени SQL 2008 могут немного улучшить его, но попробуйте это:

--Your Shift data as a temp table
declare @shifts table (ID int, Description varchar(10), [Start Time] smalldatetime, [End Time] smalldatetime)
insert into @shifts (ID, Description, [Start Time], [End Time])
select 1, 'Morning', '06:00', '13:59'
union all
select 2, 'Afternoon', '14:00', '21:59'
union all
select 3, 'Night', '22:00', '05:59'

-- Time to check
declare @timeToCheck smalldatetime
SET @timeToCheck='04:00'

-- The query to find the matching shift
select * from @shifts where 
([Start Time]<[End Time] AND @timeToCheck>=[Start Time] AND @timeToCheck<=[End Time]) OR 
([Start Time]>[End Time] AND (@timeToCheck>=[Start Time] OR @timeToCheck<=[End Time]))

Измените @timeToCheck, чтобы проверить его.

0 голосов
/ 12 августа 2010

вам не нужно хранить время окончания, это подразумевается при следующем времени запуска.если это облегчает задачу, у вас может быть вторая таблица с диапазонами времени смены с отношением один-ко-многим со сдвигами.

во второй таблице добавьте четвертую строку со сдвигом 3 в диапазоне от 0 до>5:59.поэтому table1 имеет 3 строки, table2 имеет 4, например так:

shiftID shiftTime 
3       00:00 
1       06:00 
2       14:00 
3       22:00

, если вы хотите, вы можете добавить другой столбец с именем isShiftStart, помеченный как true для времен 06, 14 и 22, и false для времени 00:00

0 голосов
/ 12 августа 2010

Если вы используете Datetime, оно будет включать в себя дату, вы можете запросить весь datetime и легко обработать результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...