2009年2月18日 星期三

透過 T-SQL 找出特定日期的上個月或前一年最後一天與倒數第 n 天之日期

下面的程式碼則是以 2008 年 3 月 19 日這個特定的日期為基準點,推算出當月第一天的日期,然後把找出來的日期扣掉 1 天就是上個月的最後一天之日期:
-- 自訂一個 DATETIME 型別的變數
DECLARE @myDate AS DATETIME

-- 以 2008 年 3 月 19 日為基準點,找出 3 月第一天的日期
SELECT @myDate = DATEADD(mm, DATEDIFF(mm, '', '2008/3/19'), '')

-- 以「日」為單位,扣掉 1 天
SELECT DATEADD(day, -1, @myDate) AS [2008年3月19日的上個月最後一天(精確到毫秒)]

所以使用相同的觀念,我們自然可以找出上個月倒數第 n 天的日期了,例如要找出上個月倒數第 3 天的日期:

-- 自訂一個 DATETIME 型別的變數
DECLARE @myDate AS DATETIME

-- 以 2008 年 3 月 19 日為基準點,找出 3 月第一天的日期
SET @myDate = DATEADD(mm, DATEDIFF(mm, '', '2008/3/19'), '')

-- 以「日」為單位,扣掉 3 天
SELECT DATEADD(day, -3, @myDate) [2008年3月19日的上個月倒數第3天(精確到毫秒)]

如果要找出前一年的最後一天之日期:

-- 自訂一個 DATETIME 型別的變數
DECLARE @myDate AS DATETIME

-- 以 2008 年 3 月 19 日為基準點,找出 2008 年第一天的日期
-- 注意:改以「年」為單位
SET @myDate = DATEADD(yy, DATEDIFF(yy, '', '2008/3/19'), '')

-- 以「日」為單位,扣掉 1 天
SELECT DATEADD(day, -1, @myDate) [2008年3月19日的前一年最後一天(精確到毫秒)]

沒有留言:

張貼留言