SQL Server取得當月第一天及最後一天

最近在寫報表時,需要讓 Reporting Service 可以按月定時發送報表給使用者,但,問題來了,要如何自動填入資料區間,讓SQL可以抓到正確的資料呢?

一開始,我用使用下列條件式進行:
...
AND YEAR(ApplyTime) = YEAR(DATEADD(MONTH, -1, GETDATE()))
AND MONTH(ApplyTime) = MONTH(DATEADD(MONTH, -1, GETDATE()))
...
不過,遇到資料量大時,資料要透過運算後才能獲得正確的結果,這樣的效果並不是很好....

後來,利用變數宣告的方式,似乎更容易了(至少我是這麼認為啦 XD)
DECLARE @StartTime datetime = DATEADD(day,-DAY(GETDATE())+1, CONVERT(datetime,CONVERT(date, GETDATE())))
DECLARE @EndTime datetime = DATEADD(ss, -1, DATEADD(m,1,@StartTime))
...
AND ApplyTime between @StartTime and @EndTime
...

不過,一般來說,都是取回前一個月的資料居多啦,因此,上面的@StartTime只要做些修改即可:
DECLARE @StartTime datetime = DATEADD(day,-DAY(GETDATE())+1, CONVERT(datetime, CONVERT(date, DATEADD(MM, -1,GETDATE()))))

2019-10-15增加:如果需要當年第一天,可用DECLARE @StartTime datetime = DATEADD(year, DATEDIFF(year, '', GETDATE()), '')

2021-02-05增加:
--取得當月的第一天
SELECT DATEADD(m, DATEDIFF(m,0,GETDATE()),0)
--當月的最後一天 = 下個月的第一天 - 1
SELECT DATEADD(day ,-1, DATEADD(m, DATEDIFF(m,0,GETDATE())+1,0))


2010-01-19 00:00:28

I said something before.....
Label 在 PictureBox 上背景不能透明 2021-05-24 06:32
Textbox限制輸入數字 2016-11-14 21:17
C# 字串分割 2016-07-28 20:25
LINQ筆記 2016-07-27 03:33
SQL Server的記錄檔無限成長 2015-11-02 05:47
安裝MySQL ODBC 5.2錯誤 – Error 1918 2014-02-03 19:27
在Reporting Service報表上顯示QRCode 2013-04-01 02:59
SQL Server DB管理筆記 2012-07-05 20:21
還原MSSQL遇到「備份組包含現有的XXX資料庫以外的資料庫備份」的錯誤 2012-05-15 12:35
Informix計算兩時間的差距 2010-08-12 06:01
ReportViewer顯示LocalReport及ServerReport 2010-05-24 04:13
簡單的對DataTable做Distinct 2009-09-20 22:18
使用 svcutil 編譯 WCF 錯誤解法 2009-07-09 07:59
PHP加載MSSQL函式庫 2008-10-20 08:54
資料庫抓取固定筆數資料 2008-09-18 22:27