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
DATEADD(DAY,-1, GETDATE())。 - 取得下個月的日期
DATEADD(MONTH, 1, GETDATE())。 - 取得當月第一天(組字串),用字串取得年月,並在尾部加上
/1CONVERT(char(7),GETDATE(),111)+'/1' - 取得下個月的第一天 (套上組好的字串 2+3)
DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1') - 當月的最後一天 = 下個月的第一天-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可以指定加減運算的單位year、month、day。
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