我必须在表中列(check_in和checkout)。它们都具有这种格式dd-mm-yyyy
。我想检查我的两个参数(输入)之间是否有可用的日期。
我试过这样:
select * from rezervare where date(check_out) > date('my_checkout_input')
但这只在少数情况下有效。如果我在2015年12月12日至2015年3月15日之间有预订,并且在2015年17月17日至2017年3月20日之间有另一个预订015年3月16日之间的日期视为免费日期。你能给我一些想法吗?
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 |
+----+------------+------------+
但真正的方法是更改表格并使用正确的日期类型。
在这种情况下,应该使用int
将日期存储为时间戳。PHP函数date()
可以将时间戳转换为您选择的格式的日期。
使用BETWEEN函数:
SELECT *
FROM rezervare
WHERE (date BETWEEN '2010-03-12' AND '2010-03-15')