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

PostgreSQL中如何正确计算员工实际工作天数?

计算员工实际工作天数的正确方法

问题背景

数据集如下:

emp_id|emp_name|work_start_date|work_end_date|days_worked_on|
------+--------+---------------+-------------+--------------+
     1|A       |     2023-03-01|   2023-03-03|             2|
     2|B       |     2023-03-04|   2023-03-04|             0|

最初使用的查询语句:

select 
    emp_id
    ,emp_name
    ,work_start_date
    ,work_end_date   
    ,work_end_date - work_start_date as days_worked_on
from demo.stackquestions;   

理想中员工A实际工作3天(2023-03-01至2023-03-03),但查询结果为2天;员工B当天工作,结果为0天,显然不符合预期。疑问是:是否应该使用 work_end_date - work_start_date +1 as days_worked_on 来得到正确天数?

解答

是的,这种方法是正确的。

日期相减得到的是两个日期之间的间隔天数,而非包含起止日期的总天数:

  • 2023-03-03 - 2023-03-01 = 2,这是两个日期的间隔天数,但实际包含的工作日是3天(1号、2号、3号),加1正好补全起始日的计数。
  • 员工B的情况中,2023-03-04 - 2023-03-04 = 0,加1后得到1,完全符合当天工作1天的实际情况。

需要注意边界场景:如果存在work_end_date早于work_start_date的无效数据,这种计算会得到错误结果,建议提前过滤这类数据,比如添加where work_end_date >= work_start_date条件。

内容的提问来源于stack exchange,提问作者Learn Hadoop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:29:57