2个日期之间的Mysql日期搜索返回0行

时间:2017-09-19 10:11:40

标签: php mysql

基本上我想让那些在指定日期之后办理登机手续并在退房日期之前或之后退房的人员。以下是我尝试过的一些问题。

SELECT * FROM `booking`
        WHERE (check_in BETWEEN '2017-09-10' AND '2017-09-21')
          AND (check_out between '2017-09-10' and '2017-09-21')

返回0行 和

SELECT * FROM `booking`
        WHERE check_in >= '2017-09-10' AND check_out <= '2017-09-21'

返回0行。我有一位客户在2017-09-18办理登机手续并于2017-09-21退房。如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我不知道您的数据库中的值,但您可能犯的一个常见错误是假设您的数据库2017-09-21条目符合(check_out between '2017-09-10' and '2017-09-21')。您的2017-09-21实际上是2017-09-21 00:00:00。很可能你的数据库日期有一些非零小时和分钟,这使得它比2017-09-21 00:00:00更大。

例如2017-09-21 05:06:23大于2017-09-21 00:00:00并且不符合您的条件。

尝试:

SELECT * FROM `booking`
        WHERE (check_in >= '2017-09-10' AND check_in < '2017-09-22')
          AND (check_out >= '2017-09-10' AND check_out <'2017-09-22')

答案 1 :(得分:1)

试试这样:

SELECT * FROM `booking`
        WHERE DATE(check_in) >= '2017-09-10' AND DATE(check_out) <= '2017-09-21'

答案 2 :(得分:0)

在签入和签出字段

中使用mysql日期格式功能
SELECT * FROM `booking`
WHERE DATE_FORMAT(check_in,'%Y-%m-%d') >= '2017-09-10' AND 
DATE_FORMAT(check_out,'%Y-%m-%d') <= '2017-09-21'