首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

T-SQL 取得月初、月末與月份間隔日期通用函數庫

     編輯:關於SqlServer

報表與 ETL 常需計算本月/上月的起迄日期,封裝為可重用片段提升開發效率。

1. 取得本月月初與月末

DECLARE @startdate DATETIME, @enddate DATETIME;
SELECT @startdate = DATEADD(DAY, -DATEPART(DAY, GETDATE()) + 1, GETDATE());
SELECT @enddate = DATEADD(DAY, -DATEPART(DAY, GETDATE()), DATEADD(MONTH, 1, GETDATE()));
-- 結果格式化:SELECT CONVERT(VARCHAR(10), @startdate, 23) -- yyyy-mm-dd

2. 取得上個月月初與月末

DECLARE @startdate DATETIME, @enddate DATETIME;
SELECT @startdate = DATEADD(MONTH, -1, DATEADD(DAY, -DATEPART(DAY, GETDATE()) + 1, GETDATE()));
SELECT @enddate = DATEADD(MONTH, -1, DATEADD(DAY, -DATEPART(DAY, GETDATE()) + 1, DATEADD(MONTH, 1, GETDATE())));

原理解析

  • DATEPART(DAY, GETDATE()) 取得今天是幾號。
  • -DAY + 1 退回到本月 1 號 00:00:00。
  • DATEADD(MONTH, 1, ...) 往前推一個月得到下月 1 號,再 -1 DAY 得到本月最後一天 23:59:59。
  • 上月邏輯:先算本月月初,再 DATEADD(MONTH, -1) 位移。

建議封裝為內嵌表值函數 fn_GetMonthRange(@offset INT),傳入 0 表本月、-1 表上月,回傳 StartDate/EndDate 兩欄,專案統一呼叫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved