Получите записи между промежуткой времени

dba.stackexchange https://dba.stackexchange.com/questions/753

  •  16-10-2019
  •  | 
  •  

Вопрос

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

9:00 AM - 10:00 AM

Ниже приведена схема таблицы

CREATE TABLE [dbo].[Samples](
[RID] [int] IDENTITY(1,1) NOT NULL,
[PersonName[nvarchar](20) NOT NULL,
[NOT_AVL_DATE] [datetime] NULL,
[NOT_AVL_FOR] [int] NULL
)

краткий:RID - это первичный ключ, PersonName - это имя сотрудника/персонала/техника, not_avl_date - это то, что сотрудники не будут подлежат облике, что Not_avl_FOR представляет время, который персонал не может быть доступен. 1 - Оставьте на полный день 2 - отпуск на первую половину дня 3 - оставьте на вторую половину дня

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

Это было полезно?

Решение 2

Ой, извините, ребята, я был в гастролях, рад, что многие обновили пост. Просто сказал, что я бы отфильтровал промежуток времени, если бы он / PM на передней части [презентационный уровень], который выведет до 0,1 или 2. Затем на слое DataCcess я делаю это not_avl_for <> @frontendparameter. Следовательно, я получаю персонал, который доступен для времени, чтобы получить работу. Это может не соответствовать вашим точным потребностям, но большую часть времени Frontend может ответить на сложные запросы, если в противном случае

Другие советы

DeepTechtons, мы действительно хотели бы увидеть ваш ответ, но, поскольку вы еще не опубликовали его, вот как это можно сделать. Этот SQL предназначен для Oracle, а не SQL Server, поэтому он должен быть переведен. В вашем сообщении отсутствуют детали, поэтому некоторые используемые предположения, вероятно, недействительны.

with AllEmployees As 
   (select distinct PersonName from samples)
select * from AllEmployees 
minus
select PersonName from samples 
where trunc(not_avl_date) = trunc(sysdate) 
and (not_avl_for = 1
   or (not_avl_for = 2 and :timespan LIKE '%AM%')
   or (not_avl_for = 3 and :timespan LIKE '%PM%')
);

Образец данных:

create table samples (rid Number(3), PersonName Varchar2(20), 
   not_avl_date date, not_avl_for integer);

insert into samples values (1,'Peter',sysdate-2, 1);
insert into samples values (2,'Peter',sysdate-1, 2);
insert into samples values (3,'Paul',sysdate-1, 3);
insert into samples values (4,'Sue',sysdate, 3);
insert into samples values (5,'Bob',sysdate-2, 2);
insert into samples values (6,'Zach',sysdate+1, 1);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top