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

PostgreSQL如何查询8个月实习期内实习生的剩余实习天数

实现逻辑说明
  • 实习周期筛选逻辑:
    • 过滤未开始实习的人员:要求实习开始日期小于等于当前日期
    • 过滤已结束实习的人员:要求实习开始日期加8个月大于当前日期
  • 剩余天数计算:用实习结束日期(开始日期+8个月)直接减去当前日期,得到的正整数就是剩余天数,不用额外处理正负值
  • 格式处理:将计算得到的剩余天数直接拼接为要求的Days(x)格式即可
完整可执行SQL(PostgreSQL语法,适配你使用的AGE函数的数据库环境)
-- 建表语句(修正了原语句缺少右括号的语法错误)
CREATE TABLE IF NOT EXISTS "interns" (
  "intern_id" smallint(5) NOT NULL,
  "f_name" varchar(20) NOT NULL,
  "l_name" varchar(20) NOT NULL,
  "gender" varchar(20) NOT NULL,
  "pr_st_date" date DEFAULT NULL,
  PRIMARY KEY ("intern_id")
);

-- 插入测试数据
INSERT INTO interns VALUES 
(1,'Ivan','Ivanov','M','2020-09-22'),
(2,'Natalia','Kurtz','F','2021-01-12'),
(3,'Kristian','Tompson','M','2021-10-20'),
(4,'Libi','Uolsh','F','2021-12-30'),
(5,'Garry','Cutcher','M','2021-01-30'),
(6,'Steven','Larson','M','2021-02-25'),
(7,'Hugh','Laurie','M','2021-03-16'),
(8,'Jonny','Walker','M','2021-01-31'),
(9,'Ketty','Perri','F','2021-05-11'),
(10,'Liza','Torn','F','2020-11-28'),
(11,'Ely','Buggle','F','2021-01-16');

-- 核心查询语句
SELECT 
  intern_id,
  f_name,
  l_name,
  gender,
  pr_st_date,
  CONCAT('Days(', (pr_st_date + INTERVAL '8 months')::date - CURRENT_DATE, ')') AS remaining_days
FROM interns
WHERE 
  pr_st_date <= CURRENT_DATE
  AND pr_st_date + INTERVAL '8 months' > CURRENT_DATE;
其他环境适配说明

如果你使用的是MySQL数据库,只需要调整时间计算相关的语法即可:

  • 实习结束日期计算改为DATE_ADD(pr_st_date, INTERVAL 8 MONTH)
  • 剩余天数计算改为DATEDIFF(DATE_ADD(pr_st_date, INTERVAL 8 MONTH), CURDATE())

不使用AGE函数的原因是它返回的是年月天组合的间隔类型,直接计算天数差值不如用结束日期减当前日期的逻辑直观,也更方便做过滤判断。

内容的提问来源于stack exchange,提问作者Sad Scientist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:48:01