我有一個存儲過程必須接受一個月爲int(1-12),一年爲int。鑑於這兩個值,我必須確定該月的日期範圍。所以我需要一個日期時間變量來表示該月的第一天,另一個日期時間變量表示該月的最後一天。有沒有一個相當簡單的方法來獲取這些信息?SQL Server 2005獲取任何一個月的第一個和最後一個日期
回答
DECLARE @Month int
DECLARE @Year int
set @Month = 2
set @Year = 2004
select DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) /*First*/
select DATEADD(day,-1,DATEADD(month,@Month,DATEADD(year,@Year-1900,0))) /*Last*/
但是,您需要什麼作爲該月的最後一天的時間組件?如果您的日期時間比午夜其他時間組件,您可能會更好只是在做類似
WHERE COL >= DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0))
AND COL < DATEADD(month,@Month,DATEADD(year,@Year-1900,0))
事情這樣,您的代碼將繼續工作,如果你最終遷移到SQL Server 2008和更高的精度的日期時間數據類型。
月份的第一天:SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)
月份的最後一天:SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0))
爲替GETDATE一個DateTime變量值()。
我很早以前就從this very handy page那裏得到了很多其他日期計算,比如「本週的星期一」和「本月的第一個星期一」。
這工作。儘管我選擇了不同的答案,因爲我更喜歡它的語法。您鏈接的頁面是一個很好的信息來源。謝謝。 – Ristogod 2010-10-12 15:57:42
DECLARE @Month int;
DECLARE @Year int;
DECLARE @FirstDayOfMonth DateTime;
DECLARE @LastDayOfMonth DateTime;
SET @Month = 3
SET @Year = 2010
SET @FirstDayOfMonth = CONVERT(datetime, CAST(@Month as varchar) + '/01/' + CAST(@Year as varchar));
SET @LastDayOfMonth = DATEADD(month, 1, CONVERT(datetime, CAST(@Month as varchar)+ '/01/' + CAST(@Year as varchar))) - 1;
這工作。儘管我選擇了不同的答案,因爲我更喜歡它的語法和不使用轉換。謝謝。 – Ristogod 2010-10-12 15:56:09
DECLARE @Month INTEGER
DECLARE @Year INTEGER
SET @Month = 10
SET @Year = 2010
DECLARE @FirstDayOfMonth DATETIME
DECLARE @LastDayOfMonth DATETIME
SET @FirstDayOfMonth = Str(@Year) + RIGHT('0' + Str(@Month), 2) + '01'
SET @LastDayOfMonth = DATEADD(dd, -1, DATEADD(mm, 1, @FirstDayOfMOnth))
SELECT @FirstDayOfMonth, @LastDayOfMonth
這工作。儘管我選擇了不同的答案,因爲我更喜歡它的語法和不使用Right。謝謝。 – Ristogod 2010-10-12 15:55:49
試試這個:
Declare @month int, @year int;
Declare @first DateTime, @last DateTime;
Set @month=10;
Set @year=2010;
Set @first=CAST(CAST(@year AS varchar) + '-' + CAST(@month AS varchar) + '-' + '1' AS DATETIME);
Set @last=DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@first)+1,0));
SELECT @first,@last;
這工作。雖然我選擇了不同的答案,因爲我更喜歡它的語法和不使用投射。謝謝。 – Ristogod 2010-10-12 15:55:14
select [FirstDay Of The Month] as Text ,convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date'
union all
select [LastDay Of The Month], convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106)
當月最後一天:
select dateadd(dd,-day(dateadd(mm,1,getdate())),dateadd(mm,1,getdate()))
本月1日日期:
select dateadd(dd,-day(getdate())+1,getdate())
DECLARE @Month int = 3, @Year int = 2016
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
-- First date of month
SET @StartDate = DATEADD(MONTH, @Month-1, DATEADD(YEAR, @Year-1900, 0));
-- Last date of month
SET @EndDate = DATEADD(SS, -1, DATEADD(MONTH, @Month, DATEADD(YEAR, @Year-1900, 0)))
這將返回包含時間分量的第一個日期和最後一個日期。
- 1. 獲取指定日期的月份的第一個和最後一個日期
- 2. 在一個月內獲取第一個和最後一個日期
- 3. 在MySQL中獲取下個月的第一個和最後一個日期
- 4. 設置10個月的第一個和最後一個日期
- 5. SQL Server:獲取一個月的第一週和第二週的日期範圍
- 6. 傳遞日期並獲得該月的第一個和最後一個日期?
- 7. 獲取上個月的最後一個日期Transact-SQL
- 8. 獲取特定日期的第一個和最後一個日期
- 9. 如何獲取ios中fscalender的第一個日期和最後一個日期?
- 10. 如何獲取上個月的第一個日期和最後一個日期? (Java)
- 11. 獲取月份的第一個星期一和最後一個星期日,穿過月份邊界
- 12. 如何在一個月內找到第一個和最後一個日期
- 13. 如何獲取每個月的第一個和最後一個月
- 14. 獲取上個月的第一天和最後一天的日期在C#
- 15. 如何使用當前月份和年份在scala上獲取第一個日期和最後一個日期
- 16. 獲取本週的第一個/最後一個日期
- 17. SQL:獲取一系列日期中的最後一個日期
- 18. 使用T-SQL獲取下個月的第一個星期日
- 19. java獲取給定月份和給定年份的第一個日期和最後一個日期
- 20. 獲取每月的第一個和第三個星期一 - strtotime
- 21. 在PHP中,有沒有簡單的方法來獲取一個月的第一個和最後一個日期?
- 22. 使用T-sql獲取本月的最後一個星期一
- 23. 在SQL Server中爲第一個和最後一個日期選擇值
- 24. 獲得第一和最後一個日期時間從每個日期查詢的SQL Server
- 25. 獲取每個項目的第一個和最後一個記錄月
- 26. 如何獲得一個月(SQL Server)的最後一天
- 27. SQL Server上個月的最後一天
- 28. 在PHP中抓取特定月份的第一個日期和最後日期
- 29. 如何在excel中獲取本月的最後一個日期
- 30. 獲取一個月的最後一個工作日
謝謝。這工作。我喜歡這個答案,因爲它似乎是最乾淨的。 – Ristogod 2010-10-12 15:58:12