iT邦幫忙

DAY 5
10

T-SQL 應用之美系列 第 5

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

以某個特定的日期作為基準點,搭配使用 DATEADD() 與 DATEEIFF() 函數去找出特定日期的上個月最後一天之日期為何或前一年最後一天之日期為何,更可進一步衍生成找出最後 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日的上個月最後一天(精確到毫秒)]

執行結果如下:

附上2008年2月的月曆讓大家參考比較:

所以使用相同的觀念,我們自然可以找出上個月倒數第 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日的前一年最後一天(精確到毫秒)]

執行結果如下:


上一篇
如何使用 T-SQL 找出特定日期該週的星期一日期為何
下一篇
如何使用 T-SQL 找出特定日期該月的第一個星期一之日期
系列文
T-SQL 應用之美30

2 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2008-09-05 16:46:27

請教一下
這個是應用在什麼情形呢?

會計過帳嗎?

alexc iT邦高手 1 級 ‧ 2008-09-06 09:45:43 檢舉

例如:
醫院要知道截至上個月底,來院看診的病患人次有多少
運輸業想瞭解去年整年一共運輸了多少貨品
...

為了找出這些符合日期區間內的資料,會使用 BETWEEN 來找出位於兩個日期區間內的資料,這時候就會用到這篇分享理所提到的方法。

0
kuochiahao
iT邦研究生 1 級 ‧ 2008-09-08 09:47:24

謝謝分享

我要留言

立即登入留言