SQL запрос выборки диапазонов дат

180
27 июля 2018, 07:20

Помогите составить SQL запрос..

Есть таблица с датами:

id |   date     | startTime | endTime
---+------------+-----------+--------
 1 | 2018-06-02 |   00:00   |  02:00
 2 | 2018-06-02 |   02:00   |  04:00
 3 | 2018-06-02 |   18:00   |  19:00
 4 | 2018-06-02 |   21:30   |  22:00

Нужно достать из нее записи, которые затрагивают входящую дату.

Например входящая 2018-06-02 15:00-17:00 не вернет ни одной, а 2018-06-02 18:00-21:40 вернет 3 и 4 записи. Спасибо.

Answer 1
DECLARE @InputData NVARCHAR(22) = '2018-06-02 18:00-21:40'
DECLARE @InputDate DATE = SUBSTRING(@InputData, 1,10)
DECLARE @InputTimeFrom TIME = SUBSTRING(@InputData, 12,5)
DECLARE @InputTimeTo TIME = SUBSTRING(@InputData, 18,22)
DECLARE @DataTable TABLE (id INT, date_column DATE, startTime TIME, endTime 
TIME)
INSERT INTO @DataTable(id, date_column, startTime, endTime) VALUES
(1 , '2018-06-02' , '00:00' , '02:00'),
(2 , '2018-06-02' , '02:00' , '04:00'),
(3 , '2018-06-02' , '18:00' , '19:00'),
(4 , '2018-06-02' , '21:30' , '22:00')
SELECT *
FROM @DataTable
WHERE date_column = @InputDate 
AND startTime BETWEEN @InputTimeFrom AND @InputTimeTo

Если поля типа varchar к этому типу нужно привести и переменные

Answer 2

Вот один из вариантов решения - будет работать только если начало \ конец периода за одну дату будет:

select * from test where date = '2018-06-02' and startTime < '21:40' and endTime > '18:00';

Здесь первое значение - конец запрашиваемого периода, второе - начало.

Пример можно погонять вот здесь.

Да, решение указано из предположения, что строки выводятся при пересечении интервала запроса и интервала в самой строчке таблицы. То есть при запросе с 18:30 до 21:40 тоже будут выводиться те же строчки.

READ ALSO
Связь многие ко многим MySql

Связь многие ко многим MySql

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

262
Установка MySQL Server

Установка MySQL Server

При установке MySQL сервер появляется данное окно, но кнопки Next нету и дальше ничего не могу сделать, было у кого такое? Как решилось?

167
Как сделать пару кривых блоков CSS?

Как сделать пару кривых блоков CSS?

Появилась следующая проблема: требуется сделать такую конструкцию ( рисунок приложен ), а я не могу понять, как это можно сделатьПомогите,...

221
Почему DOMParser не парсит DOM-структуру? [закрыт]

Почему DOMParser не парсит DOM-структуру? [закрыт]

Почему у меня DOMParser не парсит следующую довольно простую DOM-структуру?

209