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

如何获取指定日期的上月首日?SQL日期计算技术问询

获取指定日期的上月首日(SQL实现)

需求:根据左连接表中的FromPeriod字段,获取该日期对应的上月首日。例如FromPeriod为01.10.2023时,需输出01.09.2023。

你之前使用EOMONTH(@yourDate, -1)得到的是上月最后一天,这是因为EOMONTH函数本身就是返回指定月份的最后一天,偏移-1即为上月最后一天。要获取上月首日,可以用以下几种方法:

方法一:DATEADD + DATEDIFF 组合(推荐)

这是SQL Server中获取月初日期的经典写法,逻辑清晰且性能稳定:

-- 用变量测试
DECLARE @yourDate DATE = '01-OCT-2021'
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, @yourDate) - 1, 0) AS PreviousMonthFirstDay
-- 输出:2021-09-01

-- 结合你的左连接表字段使用
SELECT 
    DATEADD(MONTH, DATEDIFF(MONTH, 0, t.FromPeriod) - 1, 0) AS PreviousMonthFirstDay
FROM 
    -- 替换为你的左连接表名及关联逻辑
    YourLeftJoinedTable t

逻辑说明:

  • DATEDIFF(MONTH, 0, @yourDate):计算从1900-01-01(0对应的默认日期)到目标日期的总月数
  • 减1后得到上月的总月数,再通过DATEADD从1900-01-01加上这个月数,即可得到上月的第一天

方法二:EOMONTH + DATEADD 转换

利用上上月最后一天加1天,得到上月首日:

-- 用变量测试
DECLARE @yourDate DATE = '01-OCT-2021'
SELECT DATEADD(DAY, 1, EOMONTH(@yourDate, -2)) AS PreviousMonthFirstDay
-- 输出:2021-09-01

-- 结合你的左连接表字段使用
SELECT 
    DATEADD(DAY, 1, EOMONTH(t.FromPeriod, -2)) AS PreviousMonthFirstDay
FROM 
    YourLeftJoinedTable t

逻辑说明:

  • EOMONTH(@yourDate, -2):获取目标日期往前推2个月的最后一天(即上上月最后一天)
  • 加1天就得到上月的第一天

可选:指定输出格式(dd.MM.yyyy)

如果需要和输入格式01.10.2023一致,可以用FORMAT函数格式化结果:

SELECT 
    FORMAT(DATEADD(MONTH, DATEDIFF(MONTH, 0, t.FromPeriod) - 1, 0), 'dd.MM.yyyy') AS PreviousMonthFirstDay
FROM 
    YourLeftJoinedTable t

-- 输出示例:01.09.2023

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:20:32