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

MySQL中计算日期区间内属于1998年的天数问题

计算薪资日期区间中1998年的天数

我明白你现在需要精准统计薪资周期落在1998年的实际天数,而不是简单的总区间天数差。之前的查询只算了从起始日期到1999年初的天数,完全没聚焦在1998年的范围里,这就帮你调整成符合需求的方案:

核心SQL方案(以MySQL为例)

SELECT
  salaries.from_date,
  salaries.to_date,
  -- 计算两个区间的交集天数
  DATEDIFF(
    LEAST(salaries.to_date, '1998-12-31'),
    GREATEST(salaries.from_date, '1998-01-01')
  ) + 1 AS days_in_1998
FROM salaries
WHERE YEAR(salaries.from_date) = 1998 OR YEAR(salaries.to_date) = 1998;

逻辑拆解

  • 确定交集边界:
    • GREATEST(salaries.from_date, '1998-01-01'):取薪资起始日期和1998年年初的较大值,确保我们只从1998年开始计算
    • LEAST(salaries.to_date, '1998-12-31'):取薪资结束日期和1998年年末的较小值,确保我们只算到1998年年底
  • 计算实际天数:
    DATEDIFF(结束日期, 起始日期) 返回的是两个日期之间的间隔天数,加1是因为要包含起始和结束当天(比如1998-01-01到1998-01-01,间隔是0,加1才是正确的1天)

你的示例验证

对于 from_date=1997-06-23 和 to_date=1998-06-23:

  • 交集起始是 1998-01-01,交集结束是 1998-06-23
  • DATEDIFF计算得173天,加1后得到174天,这就是1998年的实际天数

适配其他数据库(比如SQL Server)

如果用的是SQL Server,DATEDIFF 的参数顺序是(单位,起始日期,结束日期),调整后的语句:

SELECT
  from_date,
  to_date,
  DATEDIFF(day, 
    GREATEST(from_date, '1998-01-01'),
    LEAST(to_date, '1998-12-31')
  ) + 1 AS days_in_1998
FROM salaries
WHERE YEAR(from_date) = 1998 OR YEAR(to_date) = 1998;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:42:07