SQL Time Overlap / Конфликт Запрос - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть требование, когда мне нужно назначить некоторый ресурс для некоторого фрейма зубца. Например,

Существующий в базе данных: Джон Смит - 01.03.2011 - с 6:00 до 7:00AM - Экономика
Для вставки: Джон Смит - 01.03.2011 - с 6:30 до 7:00 утра - Математика

Здесь, вставляя второй ряд, я хочу проверить этовремя перекрывается, если его перекрытие, я хочу пропустить вставку. Как я могу добиться этого? У меня есть Date, FromTime и ToTime в отдельных столбцах.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2011

использовать вычисленные даты с использованием конверсии:

cast(cast(mydatecolumn as varchar(20)) + ' ' + 
 cast(mytimecolumn as varchar(20)) as datetime)

выходы, например start_datetime и end_datetime

предполагаемые переменные: @inserted_start_datetime, @inserted_end_datetime, @ name

Insert Into MyTable(<values>)
Where not exists ( 
 select * from table t2 
 where name = @name 
 and (@inserted_start_datetime between start_datetime and end_datetime 
  or @inserted_end_datetime between start_datetime and end_datetime 
  or start_datetime between @inserted_start_datetime and @inserted_end_datetime 
  or end_datetime between @inserted_start_datetime and @inserted_end_datetime ))

EDITED

0 голосов
/ 28 февраля 2011

В основном так:

INSERT INTO atable (Name, Date, FromTime, ToTime, Subject)
SELECT
  @Name,
  @Date,
  @FromTime,
  @ToTime,
  @Subject
WHERE NOT EXISTS (
  SELECT * FROM atable
  WHERE Name = @Name AND Date = @Date
    AND (FromTime >= @FromTime AND FromTime < @ToTime  OR
         @FromTime >= FromTime AND @FromTime < ToTime)
)

Вы можете добавить преобразование данных, если и где это необходимо.

0 голосов
/ 28 февраля 2011

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

если не существует (выберите * из таблицы, где name = @name и @startTime между startTime и endTime или @endTime между startTime и endTime) начать

сделать вставку.

, где @name = Джон Смит @startTime = 01.03.2011 6:30 @endTime = 01.03.2011 7:00

конец

...