2015-03-22 9 views
1

У меня есть столбцы в моей таблице (check_in и checkout). Оба они имеют этот формат dd-mm-yyyy. Я хочу проверить, есть ли какая-либо дата между моими двумя параметрами (входы).Извлечение конкретных дат из запроса mysql

Я пытался так:

select * from rezervare where date(check_out) > date('my_checkout_input') 

, но это работает только в нескольких случаях. Если у меня есть резервирование между 12-03-2015 - 15-03-2015 и другое резервирование между 17-03-2015 и 20-03-2015. Это не займет даты между 16-03-2015 в качестве бесплатной даты. Можете ли вы дать мне несколько идей?

+0

И, конечно же, это поля даты и даты MySQL. – adeneo

+0

Sidenote: вы должны хранить даты в формате MySQL datetime в формате YYYY-mm-dd меньше головных болей. https://dev.mysql.com/doc/refman/5.0/en/datetime.html –

+0

Фактически формат столбца объявляется как текст. –

ответ

0
create table rezervare (
    id int auto_increment, 
    check_in varchar(10), 
    checkout varchar(10), 
    primary key (id) 
); 
insert into rezervare values 
    (null, '12-03-2015', '12-03-2015'), 
    (null, '13-03-2015', '13-03-2015'), 
    (null, '14-03-2015', '14-03-2015'), 
    (null, '15-03-2015', '15-03-2015'), 
    (null, '16-03-2015', '16-03-2015'), 
    (null, '17-03-2015', '17-03-2015'), 
    (null, '19-03-2015', '19-03-2015'), 
    (null, '20-03-2015', '20-03-2015') 
; 

select * from rezervare; 
+----+------------+------------+ 
| id | check_in | checkout | 
+----+------------+------------+ 
| 1 | 12-03-2015 | 12-03-2015 | 
| 2 | 13-03-2015 | 13-03-2015 | 
| 3 | 14-03-2015 | 14-03-2015 | 
| 4 | 15-03-2015 | 15-03-2015 | 
| 5 | 16-03-2015 | 16-03-2015 | 
| 6 | 17-03-2015 | 17-03-2015 | 
| 7 | 19-03-2015 | 19-03-2015 | 
| 8 | 20-03-2015 | 20-03-2015 | 
+----+------------+------------+ 

Если ваша схема так же, как это, вы не можете использовать дату функция, потому что:

select id, date(check_in), date(checkout) from rezervare ; 
+----+----------------+----------------+ 
| id | date(check_in) | date(checkout) | 
+----+----------------+----------------+ 
| 1 | NULL   | NULL   | 
| 2 | NULL   | NULL   | 
| 3 | NULL   | NULL   | 
| 4 | NULL   | NULL   | 
| 5 | NULL   | NULL   | 
| 6 | NULL   | NULL   | 
| 7 | NULL   | NULL   | 
| 8 | NULL   | NULL   | 
+----+----------------+----------------+ 

Но вы можете использовать между ними, в мой пример он отлично работает:

select * from rezervare where checkout between '12-03-2015' and '15-03-2015'; 
+----+------------+------------+ 
| id | check_in | checkout | 
+----+------------+------------+ 
| 1 | 12-03-2015 | 12-03-2015 | 
| 2 | 13-03-2015 | 13-03-2015 | 
| 3 | 14-03-2015 | 14-03-2015 | 
| 4 | 15-03-2015 | 15-03-2015 | 
+----+------------+------------+ 

select * from rezervare where checkout > '14-03-2015'; 
+----+------------+------------+ 
| id | check_in | checkout | 
+----+------------+------------+ 
| 4 | 15-03-2015 | 15-03-2015 | 
| 5 | 16-03-2015 | 16-03-2015 | 
| 6 | 17-03-2015 | 17-03-2015 | 
| 7 | 19-03-2015 | 19-03-2015 | 
| 8 | 20-03-2015 | 20-03-2015 | 
+----+------------+------------+ 

Бу t true way - изменить таблицу и использовать правильный тип даты.

0

В этом случае вы должны использовать int, чтобы сохранить дату как временную метку. Функция PHP date() может преобразовать временную метку на сегодняшний день в выбранном вами формате.

0

Используйте BETWEEN функции:

SELECT * 
    FROM rezervare 
    WHERE (date BETWEEN '2010-03-12' AND '2010-03-15') 
+0

У меня нет столбец даты. У меня есть check_in и checkout –

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