PostgreSQL如何查询check_out与check_in间隔大于2天的数据行?
筛选时间间隔超2天的数据行
我的case表包含两个timestamp类型字段:check_in(入住时间)和check_out(退房时间),现有数据示例:
check_in check_out "2021-09-07 07:25:00" "2021-09-08 17:10:00" "2020-09-25 06:02:00" "2020-09-27 15:20:00" "2020-10-26 05:42:00" "2020-10-29 13:05:00"
我需要查询出check_out与check_in时间间隔大于2天的数据行,之前尝试的语句类似:
select * from case where check_out - check_in > 2 days ;
期望得到的结果是:
check_in check_out "2020-09-25 06:02:00" "2020-09-27 15:20:00" "2020-10-26 05:42:00" "2020-10-29 13:05:00"
不同数据库的正确写法
不同数据库对时间间隔的计算语法存在差异,以下是几种常见数据库的实现方式:
- MySQL/MariaDB:
-- 方法1:用DATEDIFF函数直接计算天数差 SELECT * FROM `case` WHERE DATEDIFF(check_out, check_in) > 2; -- 方法2:通过时间戳差值转换为天数 SELECT * FROM `case` WHERE (UNIX_TIMESTAMP(check_out) - UNIX_TIMESTAMP(check_in)) / 86400 > 2; - PostgreSQL:
-- 方法1:直接计算时间间隔 SELECT * FROM "case" WHERE check_out - check_in > INTERVAL '2 days'; -- 方法2:用AGE函数计算时间差 SELECT * FROM "case" WHERE AGE(check_out, check_in) > INTERVAL '2 days'; - SQL Server:
SELECT * FROM [case] WHERE DATEDIFF(day, check_in, check_out) > 2; - Oracle:
-- 方法1:直接计算天数差 SELECT * FROM "CASE" WHERE (check_out - check_in) > 2; -- 方法2:通过时间间隔函数实现 SELECT * FROM "CASE" WHERE check_out > check_in + NUMTODSINTERVAL(2, 'DAY');
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

