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
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 |