You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:10:44