2010-06-12 3 views
0

У меня есть таблица с 3-мя полями:Диапазон дат/проблема запроса

  • Ид
  • datestart
  • dateend

мне нужно запросить, чтобы это выяснить, если пара дат из формы противоречащие, т.е.

запись в таблице 1, 2010-12-01, 2010-12-09

из формы 2010-12-08, 2010-12-15 (отредактирован, опечатка)

select id 
    from date_table 
where '2010-12-02' between datestart and dateend 

Это возвращает меня id, что я хочу, но то, что я хотел бы сделать, это взять диапазон дат из формы и выполните запрос, подобный тому, что у меня есть, которое примет обе формы дат 2010-12-08, 20-12-15 и запросит db, чтобы убедиться, что в таблице нет противоречивых диапазонов дат.

сижусь чесать голову с проблемой ...

ТИА

+0

'20-12-15' - это действительно дата? или просто ошибка? –

+0

также определить 'противоречащий' пожалуйста –

+0

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

ответ

0

Если я правильно понял ваш запрос, вы бы хотели, чтобы список всех записей в таблице date_table либо перекрывал ваш form_start, либо ваш form_end, либо полностью содержался в пределах диапазона form_start - form_end.

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

SELECT id FROM 
date_table 
WHERE 
(datestart < form_start AND dateend => form_start) 
OR 
(datestart <= form_end AND dateend > form_end) 
OR 
(datestart >= form_start AND dateend <= form_end) 
+0

спасибо за это, это заставило меня задуматься над проблемой и частично частично решить ее самостоятельно ... (был полностью разрешен, пока мой босс не бросил мне кривую мяч). Перекрытие разрешено, так как подходящий экипаж заканчивает работу по утрам и может планироваться начать еще днем ​​днем ​​!!! 'ВЫБОР av_bookedid, av_datestart, av_dateend ИЗ date_table ГДЕ ('form_start' МЕЖДУ datestart И dateend) ИЛИ ('form_end'BETWEEN datestart И dateend);' – Simon

+0

мне делать, если это не знаю применяется к вашему сценарию, но вы все равно пропустите те формы, которые перекрывают целые интервалы дат в таблице date_table. Вы можете поймать их, добавив OR (form_start

+0

Thats the bit Мне нужно !!! Вы бог !!!!! сумасшедший, что что-то настолько простое может чувствовать себя так далеко ... Большое спасибо моему другу – Simon

-1
select id from date_table where '2010-12-02' between datestart and dateend; 

Я не знаю, в рамках вашей программы. Но, похоже, вы говорите: выберите id из таблицы, где эта дата «2010-12-02» находится между двумя переменными. Я думаю, вы хотите выбрать, где datestart находится между двумя переменными.

Простите меня & исправьте меня, если я ошибаюсь? Вы, наверное, хотите что-то вроде этого:

SELECT id FROM date_table WHERE datestart = datestart AND dateend = dateend; 

, если это так, вы, вероятно, просто хочу подсчет:

SELECT COUNT(id) FROM date_table WHERE datestart = datestart AND dateend = dateend; 

удачи!

+0

В простом английском языке, что мне нужно, это обеспечить, чтобы диапазон дат от формы 'form_start' до' form_end' не перекрывался с диапазонами дат в таблице 'datestart' до' dateend' Возможно, дополнительная информация поможет, я делаю это для своего босса (я сварщик!), и мы используем несколько подходящих команд для установки сталелитейной работы, мы хотим получить список 'id' экипажей, которые доступны ... Может быть, это поможет? – Simon

+0

'выберите идентификатор из date_table где '2010-12-02' между datestart и dateend;' следует читать что-то вроде (на английском языке) 'ВЫБРАТЬ идентификатор FROM date_table WHERE RANGE form_date_start К form_date_end В диапазоне datestart К dateend' Так что «должен» дать мне список «id», который занят работой в какой-то момент в диапазоне дат ... – Simon

Смежные вопросы