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

如何在MS Access中通过SELECT语句将日期范围拆分为多行

在MS Access中拆分员工起止日期为每日记录

要实现把每个员工的起止日期区间拆分成每一天的单独记录,在Access里我们可以借助一个日期辅助表来实现——因为Access不像SQL Server那样支持递归CTE(虽然新版本有有限支持,但辅助表的方式兼容性更好)。

步骤1:创建日期辅助表

首先你需要建一个叫DateList的表,只需要一个DateValue字段(日期类型),然后填充上覆盖你所有员工起止日期范围的所有日期。比如你可以用这段查询快速生成日期(假设要生成2018年全年的日期):

INSERT INTO DateList (DateValue)
SELECT DateAdd("d", [num]-1, #2018/01/01#) AS DateValue
FROM (
    SELECT TOP 365 RowNumber AS num
    FROM (
        SELECT COUNT(*) AS RowNumber FROM MSysObjects AS a, MSysObjects AS b, MSysObjects AS c
    ) AS Numbers
    ORDER BY num
);

注:如果你的日期范围更大,调整TOP的数值和起始日期即可。

步骤2:编写主查询

接下来就可以用员工表和DateList表做关联,筛选出每个员工起止日期内的所有日期:

SELECT 
    E.Emp_ID,
    E.Employee_Name,
    Format(D.DateValue, "dd-mm-yyyy") AS [Date]
FROM 
    Employees AS E
INNER JOIN 
    DateList AS D ON D.DateValue BETWEEN E.[Start Date] AND E.[End date]
ORDER BY 
    E.Emp_ID, D.DateValue;

这里假设你的员工表名叫Employees,如果实际表名不同记得替换。Format函数是为了把日期转换成你需要的dd-mm-yyyy格式。

效果验证

用你给出的示例数据,这个查询会返回:

Emp_IDEmployee_NameDate
A0001Adam25-03-2018
A0001Adam26-03-2018
A0001Adam27-03-2018
A0001Adam28-03-2018
A0001Adam29-03-2018
A0001Adam30-03-2018
A0001Adam31-03-2018
B0052Brad28-04-2018
B0052Brad29-04-2018
B0052Brad30-04-2018

完全符合你想要的结果~

内容的提问来源于stack exchange,提问作者M.Brahim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:34:56