如何获取指定日期的上月首日?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
相关产品推荐
相关产品推荐

