2016-05-04 2 views
2

У меня есть имя таблицы в качестве ордеров. Заказы таблица имеет два названия столбцов являются дата_начало end_dateКак выбрать строки между двумя разными столбцами с двумя разными значениями ввода в одной таблице на mysql

S.No  start_date end_date 
1  2016-04-01 2016-04-08 
2  2016-04-28 2016-05-29 
3  2016-05-01 2016-05-39 

Теперь я хочу запись между датой начала 2016-04-01 и днем ​​окончания 2016-04-30.

Пожалуйста, помогите мне в этом

ответ

0

Это то, что вы ищете?

select * 
from Orders 
where 
    (start_date >= '2016-04-01' and start_date < '2016-05-01'); 

Редактировать Update, чтобы отразить комментарии OP.

SQL Fiddle

+0

No Mituw. У меня есть два фильтра даты даты начала и даты окончания. Если я выбираю фильтр даты начала 2016-04-05 и фильтр даты окончания как 2016-04-30, то обе записи должны появиться, потому что дата начала второй строки меньше даты окончания фильтра –

+0

Я вижу, я отредактирую свой ответ соответствующим образом и обновлю скрипка. – mituw16

+0

@mallip См. Мой обновленный ответ – mituw16

0

Если вы хотите только заказы, которые бежали от 4/1 - 4/30, то:

SELECT * 
FROM 
    orders 
WHERE 
    start_date = '2016-4-1' 
    AND end_date = '2016-4-30' 

Если вы хотите заказы, либо созданные на 4/1 или заканчивались на 4/30, то:

SELECT * 
FROM 
    orders 
WHERE 
    start_date = '2016-4-1' 
    OR end_date = '2016-4-30' 

Редактировать после OP комментарий

SELECT * 
FROM 
    orders 
WHERE 
    start_date between '2016-4-1' AND '2016-4-30' 
    OR end_date between '2016-4-1' AND '2016-4-30' 
+0

Я выполнил этот запрос, но никаких записей не отображается. Я хочу, чтобы между записями не были точно сопоставлены записи –

+0

Прохладный, проверьте между – ScottieB

1

Предполагая start_date всегда < = end_date, вы можете получить лучшие результаты с запросом ниже, поскольку это дает больше конкретики на start_date фильтра:

select * 
from Orders 
where start_date between '2016-04-01' and '2016-04-30' 
    and end_date between '2016-04-01' and '2016-04-30' 
+0

Он вернет только первую строку. Но я тоже хочу 2-й ряд. потому что дата начала второй строки меньше, чем диапазон фильтров –

3

Предполагая, что вы хотите записи, которые перекрывают диапазон :

SELECT * 
    FROM orders 
WHERE start_date <= :end_range 
    AND end_date >= :start_range 

В вашем случае:

SELECT * 
    FROM orders 
WHERE start_date <= '2016-04-30' 
    AND end_date >= '2016-04-01' 

Это работает, как показано ниже:

  <---RANGE--> 
    <-->          X end_date < :start_range 
R  <---->         Returned 
O    <---->       Returned 
W   <--------------->     Returned 
S     <---->     Returned 
          <-->    X start_date > :end_range 
1

Вы хотите: выберите * от заказов, где start_date между '04/01/2016' и '04/30/2016' И датой_окончания между '04/01/2016 'И '04/30/2016'

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