2016-02-22 3 views
0

Ok, так что это немного сбивает с толку (следовательно, почему я прошу о помощи)SQL для поиска диапазон дат, используя диапазон дат

У меня есть таблица в базе данных MySQL, который выглядит так:

+-----+-------------+------------+------------+---------------+---------+-----------+---------+ 
| id | supplier_id | start_date | end_date | days_attended | user_id | client_id | trashed | 
+-----+-------------+------------+------------+---------------+---------+-----------+---------+ 
| 1 |   15 | 1410098400 | 1410703200 |    2 |  7 |  424 |  0 | 
| 2 |   84 | 1411912800 | 1420117200 |    3 |  7 |  395 |  0 | 
| 3 |   183 | 1390827600 | 1418907600 |    2 |  7 |  96 |  0 | 
| 4 |   85 | 1412431200 | 1419512400 |    5 |  7 |  105 |  0 | 
| 5 |   168 | 1411912800 | 1412258400 |    3 |  7 |  53 |  0 | 

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

Как вы можете видеть, для каждой строки есть дата начала и окончания. Поэтому мне нужен SQL-запрос, который будет искать дату в эти две даты PER ROW, используя две даты, выбранные пользователем.

i.e. Пользователь выбирает диапазон дат: 21/09/2015 по 21/12/2015. Затем запрос будет искать даты между этими датами, используя существующий диапазон дат в таблице.

+0

как обрабатывать overlaped диапазон? не полностью включен в диапазон использования –

+0

Вы хотите, чтобы и дата начала, и дата окончания, указанная в таблице, находились между двумя датами, указанными пользователем? – Joyson

+0

Обе даты в таблице не обязательно должны быть указаны в указанные даты. до тех пор, пока один из них или любая дата между датами таблицы. –

ответ

1

Если вы хотите проверить, находится ли start_date или end_date между датой начала и конечной датой пользователя.

Вы можете подключить значения пользователей в для user_start_date и user_end_date здесь:

SELECT * FROM table 
WHERE (start_date >= user_start_date AND start_date <= user_end_date) 
OR (end_date >= user_start_date AND end_date <= user_end_date); 
1

Пожалуйста, попробуйте это

SELECT * FROM table WHERE (
start_date >= UNIX_TIMESTAMP(STR_TO_DATE(var_date_1, '%d/%M/%Y')) AND 
end_date <= UNIX_TIMESTAMP(STR_TO_DATE(var_date_2, '%d/%M/%Y')) 
) ; 
Смежные вопросы