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

编写SQL查询获取指定年月的当月最后一天

获取指定年月的当月最后一天SQL查询方案

需求说明

根据传入的3位英文月份缩写(如'Apr'、'May')和两位年份数字(如'17'、'19'),返回该月份的最后一个日历日,格式为日/月/年(例如30/4/2017)。

解决方案(SQL Server)

以下是适配SQL Server环境的查询代码,包含年份转换、月份解析和最后日期计算的完整逻辑:

DECLARE @MONTH NVARCHAR(3) = 'Apr'
DECLARE @yr_accting INT = 17

-- 转换两位年份为四位(可根据业务规则调整区间)
DECLARE @full_year INT = CASE 
    WHEN @yr_accting BETWEEN 0 AND 99 THEN 
        CASE WHEN @yr_accting <= 29 THEN 2000 + @yr_accting ELSE 1900 + @yr_accting END
    ELSE @yr_accting
END

-- 解析英文月份缩写为数字
DECLARE @month_num INT = DATEPART(MONTH, @MONTH + ' 01 2000')

-- 计算当月最后一天并格式化输出
SELECT FORMAT(EOMONTH(DATEFROMPARTS(@full_year, @month_num, 1)), 'dd/M/yyyy') AS LastDayOfMonth

关键逻辑说明

  1. 年份转换:针对两位年份数字,默认将00-29映射为2000-2029,30-99映射为1930-1999,可根据实际业务需求修改CASE判断条件。
  2. 月份解析:通过拼接固定日期(如2000年1月1日),利用DATEPART函数提取英文月份缩写对应的数字。
  3. 最后日期计算:使用EOMONTH函数直接获取当月最后一天(SQL Server 2012及以上版本支持);若需兼容更低版本,可替换为以下写法:
    DECLARE @first_day DATE = DATEFROMPARTS(@full_year, @month_num, 1)
    DECLARE @last_day DATE = DATEADD(DAY, -1, DATEADD(MONTH, 1, @first_day))
    

示例验证

  • 输入:@MONTH = 'Apr',@yr_accting = 17 → 输出:30/4/2017
  • 输入:@MONTH = 'May',@yr_accting = 19 → 输出:31/5/2019
  • 输入:@MONTH = 'Nov',@yr_accting = 21 → 输出:30/11/2021

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:03:43