Home [SQL] 求月底日期 Dateadd()、Datediff()、Eomonth()
Post
Cancel

[SQL] 求月底日期 Dateadd()、Datediff()、Eomonth()

Oracle有用來求得月底日期的LAST_DAY()函數,但SQL Server沒有與LAST_DAY()相當的函數,因此要自己計算。

當月的最後一天 = 下個月的第一天-1

DATEADD() + CONVERT()組字串

1
2
3
--求得這個月最後一天的日期
--當月的最後一天 = 下個月的第一天-1
select DATEADD(DAY,-1, DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1')) "月底日期"

我的計算順序

當月的最後一天 = 下個月的第一天-1:

  1. 日期減1 DATEADD(DAY,-1, GETDATE())
  2. 取得下個月的日期 DATEADD(MONTH, 1, GETDATE())
  3. 取得當月第一天(組字串),用字串取得年月,並在尾部加上/1 CONVERT(char(7),GETDATE(),111)+'/1'
  4. 取得下個月的第一天 (套上組好的字串 2+3) DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1')
  5. 當月的最後一天 = 下個月的第一天-1 (1+4) DATEADD(DAY,-1, DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1'))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--1.日期減1
select DATEADD(DAY,-1, GETDATE()) --昨天

--2.下個月的日期
select DATEADD(MONTH, 1, GETDATE()) --2011-01-29 23:51:55.820

--3.當月第一天(組字串),用字串取得年月,並在尾部加上'/1'
select CONVERT(char(7),GETDATE(),111) --年月 2011/12
select CONVERT(char(7),GETDATE(),111)+'/1' --月初 2011/12/1

--4.下個月的第一天(2+3)
select DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1')

--5.月底日期=下個月的第一天-1 (1+4)
select DATEADD(DAY,-1, DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1'))

DATEADD() + DATEDIFF()

1
2
--當月的最後一天 = 下個月的第一天-1
select DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE())+1,0))

DATEDIFF(MONTH,0,GETDATE())為計算當日期和 “1900-01-01 00:00:00.000”這個日期之間的月數。

DATEADD()語法

1
Dateadd(datepart, number, date)

datepart可以指定加減運算的單位yearmonthday

DATEDIFF()語法

1
Datediff(datepart, date1, date2)

EOMONTH()

1
2
3
4
5
--指定日期所在月份的最後一天
select EOMONTH('2011-01-01') -- 2011-01-31

--增加4個月後的所在月份的最後一天
select EOMONTH('2011-01-01',4) -- 2011-05-31
This post is licensed under CC BY 4.0 by the author.