SQLSERVER如何获取每月月底的时间

SQLSERVER如何获取每月月底的时间

SQL 帆软用户AK9hEVlRMF 发布于 昨天 16:21
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
CD20160914Lv8专家互助
发布于昨天 16:23(编辑于 昨天 16:33

帆软函数最简单了呀

函数的方式

MAPARRAY(RANGE(1,12),FORMAT(DATEINMONTH(CONCATENATE(YEAR(today()),"-",FORMAT(item,"00"),"-01"),-1),"yyyy-MM-dd"))

image.png

sql server中

SELECT EOMONTH(GETDATE()) AS LastDayOfMonth;

image.png

SELECT 

    MonthNumber AS 月份,

    EOMONTH(DATEFROMPARTS(YEAR(GETDATE()), MonthNumber, 1)) AS 月末日期

FROM 

    (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) AS Months(MonthNumber)

ORDER BY 

    MonthNumber;

image.png

  • 帆软用户AK9hEVlRMF 帆软用户AK9hEVlRMF(提问者) 想要每个月月底的时间,不是本月
    2025-09-18 16:26 
  • CD20160914 CD20160914 回复 帆软用户AK9hEVlRMF(提问者) 上面更新了语句了。。
    2025-09-18 16:29 
  • CD20160914 CD20160914 回复 帆软用户AK9hEVlRMF(提问者) 还有做一个日期维度表,这样查询也是可以的。日期维度表可以有很多列,比如返回是否月初,是否月底,是否季度末,是否季度初,然后返回你要的都可以在日期维度表中处理好!
    2025-09-18 16:36 
最佳回答
0
华莉星宸Lv7专家互助
发布于昨天 16:24

在SQL Server中获取每月月底的时间,可以根据版本选择不同的方法,以下是常用方案: ### 1. 使用 `EOMONTH` 函数(推荐,SQL Server 2012及以上版本) `EOMONTH` 是专门用于获取月底日期的函数,语法简单,直接返回指定日期所在月份的最后一天。 **基本语法**:   ```sql EOMONTH(start_date [, month_to_add]) ``` - `start_date`:基准日期(可以是具体日期或日期变量) - `month_to_add`(可选):在基准日期基础上增加的月份数(默认0) **示例**: ```sql -- 获取当前月份的月底日期 SELECT EOMONTH(GETDATE()) AS CurrentMonthEnd; -- 获取指定日期(如2023-05-10)所在月份的月底 SELECT EOMONTH('2023-05-10') AS May2023End; -- 返回 2023-05-31 -- 获取3个月后的月底(如当前是2023-05-01,返回2023-08-31) SELECT EOMONTH('2023-05-01', 3) AS ThreeMonthsLaterEnd; ``` ### 2. 兼容旧版本(SQL Server 2008及以下) 如果版本不支持 `EOMONTH`,可以通过 `DATEADD` 和 `DATEDIFF` 组合计算:   原理:先获取「下个月的第一天」,再减去1天,即为本月最后一天。 **示例**: ```sql -- 获取当前月份的月底日期 SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) AS CurrentMonthEnd; -- 解析: -- 1. DATEDIFF(MONTH, 0, GETDATE()):计算从基准日期(1900-01-01)到当前日期的月数 -- 2. +1 后,DATEADD(MONTH, ..., 0):得到下个月的第一天(如2023-06-01) -- 3. 减去1天:得到本月最后一天(如2023-05-31) ``` ### 3. 获取月底的最后一刻(含时间) 如果需要精确到当月最后一秒(如 `2023-05-31 23:59:59.999`),可以在日期基础上补充时间: ```sql -- 方法1:基于EOMONTH SELECT DATEADD(SECOND, -1, DATEADD(DAY, 1, EOMONTH(GETDATE()))) AS MonthEndLastMoment; -- 方法2:兼容旧版本 SELECT DATEADD(SECOND, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) AS MonthEndLastMoment; ``` ### 注意事项 - `EOMONTH` 会自动处理闰年2月(如2020年2月返回29日,2021年2月返回28日)。 - 日期计算时需注意字段是否为 `DATE` 或 `DATETIME` 类型,避免隐式转换错误。

最佳回答
0
Y时光Lv5见习互助
发布于昨天 16:27

SELECT DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)) AS 当月最后一天;

  • 4关注人数
  • 41浏览人数
  • 最后回答于:昨天 16:33
    请选择关闭问题的原因
    确定 取消
    返回顶部