[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбрать значения во временном интервале
philimon
Допустим, в mysql есть 2 столбца: time_begin и time_end типа time. Нужно проверить, входит ли time_begin и time_end во временной диапазон, допустим от 0:00 ч. до 3:00. На ум пришло это:

SELECT FROM WHERE time_begin <= '00:00:00' AND time_end >= '03:00:00'


Но не работает.



Спустя 1 час, 43 минуты, 52 секунды (7.02.2011 - 19:58) philimon написал(а):
Вот такое условие работает:
WHERE (time_begin < '03:00:00' AND  (time_end >= '03:00:00' OR time_end > '00:00:00'))

но, думаю, есть другой вариант. Может условие between, хотя у меня не получилось

Спустя 27 секунд (7.02.2011 - 19:59) jetistyum написал(а):
SELECT FROM WHERE
точно не будет работать
а вот
select  '02:00:00' between '00:00:00' and '05:00:00';

работает отлично

Спустя 2 часа, 11 минут, 56 секунд (7.02.2011 - 22:10) philimon написал(а):
Цитата (jetistyum @ 7.02.2011 - 16:59)
<pre class="sh_sourceCode" rel="sql"><span class="sh_keyword">SELECT FROM WHERE</span></pre> точно не будет работать
а вот
<pre class="sh_sourceCode" rel="sql"><span class="sh_keyword">select</span>  <span class="sh_string">'02:00:00'</span> <span class="sh_keyword">between</span> <span class="sh_string">'00:00:00'</span> <span class="sh_keyword">and</span> <span class="sh_string">'05:00:00'</span><span class="sh_symbol">;</span></pre>
работает отлично

Совершенно неправильно работает, если, конечно, я правильно понял синтаксис:
time_begin BETWEEN '00:00:00' AND '03:00:00'

и так тоже неверный результат:
time_begin AND time_end BETWEEN '00:00:00' AND '03:00:00'

time_begin не обязательно должен начинаться в 00:00, может и раньше или в промежутке от 00:00 до 02:00, а time_end, соответственно, может заканчиваться не в 03:00, а в 01:00 или более

Спустя 6 часов, 11 минут, 35 секунд (8.02.2011 - 04:22) jetistyum написал(а):
не обратил внимания что у тебя два поля. тогда BETWEEN не катит.
Твой запрос должен работать
SELECT * FROM table WHERE time_begin <= '00:00:00' AND time_end >= '03:00:00'
покажи какая ошибка возвращается, покажи свою базу данных


Спустя 5 часов, 15 минут, 48 секунд (8.02.2011 - 09:38) linker написал(а):
SELECT ... FROM ... WHERE begin BETWEEN ...AND end BETWEEN ...

Спустя 12 часов, 14 минут, 46 секунд (8.02.2011 - 21:53) philimon написал(а):
jetistyum

Приведу пример записей в БД:
id   |    time_begin |    time_end
1 | 14:00:00 | 17:00:00


Из этого видно, что время с 14:00 до 17:00 уже занято, а мне нужно проверить, занято ли время с, допустим, 13:00 до 15:00. Получается, что запрос
SELECT * FROM table WHERE time_begin <= '13:00:00' AND time_end >= '15:00:00'

Не отработает точно(вернет пустое значение) потому что time_begin <= '13:00:00', т.е. time_begin никак не совпадает с 14:00.
По этому же не отработает и запрос linker.

Спасибо всем Вам за поддержку, но мой запрос из второго поста учитывает все эти нюансы:
WHERE (time_begin < '15:00:00' AND  (time_end >= '15:00:00' OR time_end > '13:00:00'))

Спустя 2 часа, 18 минут, 43 секунды (9.02.2011 - 00:11) linker написал(а):
philimon
Ну вообще-то тут коллизия, занятое время с 14 до 17, а тебе надо с 13 до 15, но время-то с 14 до 15 занято, потому запрос все верное вернул. Подумай еще.

Спустя 14 часов, 54 минуты, 43 секунды (9.02.2011 - 15:06) Guest написал(а):
philimon, твой запрос 100% верен, только упрости его немного.

Намек: (a > 3 OR a >= 5) тождественно равно (a > 3)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.