如何用SQL计算日期差并筛选入住超2天的酒店客户信息
1. 如何在SQL中计算两个日期之间的差值?
不同SQL数据库计算日期差的函数存在差异,常见实现方式如下:
- MySQL/MariaDB:使用
DATEDIFF(end_date, start_date),返回两个日期的天数差值
示例:SELECT DATEDIFF('2024-05-10', '2024-05-01');结果为9 - SQL Server:使用
DATEDIFF(interval, start_date, end_date),需指定计算间隔(如day、month)
示例:SELECT DATEDIFF(day, '2024-05-01', '2024-05-10');结果为9 - Oracle:直接通过日期相减得到天数差,或用
MONTHS_BETWEEN计算月份差
示例:SELECT TO_DATE('10-MAY-2024', 'DD-MON-YYYY') - TO_DATE('01-MAY-2024', 'DD-MON-YYYY') FROM DUAL;结果为9
2. 查询入住时长超过2天的酒店客户详细记录
表结构
Rooms表
| arrival | checkout | roomid |
|---|---|---|
| 2/2/2004 | 2/3/2004 | 01 |
| 2/2/2004 | 2/3/2004 | 02 |
Customer表
| cust name | room id |
|---|---|
| raj | 01 |
| rohan | 02 |
解决方案SQL语句
以MySQL为例,关联两张表并筛选入住时长符合条件的记录:
SELECT c.`cust name`, r.arrival, r.checkout, r.roomid AS `room id` FROM Rooms r JOIN Customer c ON r.roomid = c.`room id` WHERE DATEDIFF(r.checkout, r.arrival) > 2;
若使用其他数据库,需替换对应日期差函数,比如SQL Server可改为DATEDIFF(day, r.arrival, r.checkout) > 2
预期输出
| cust name | arrival | checkout | room id |
|---|---|---|---|
| rohan | 2/2/2004 | 2/3/2004 | 02 |
内容的提问来源于stack exchange,提问作者Dhruvil Kundaliya
相关产品推荐
相关产品推荐

