Home [SQL] 求兩日期間的相差日數 Datediff()
Post
Cancel

[SQL] 求兩日期間的相差日數 Datediff()

取得兩個日期之間的相差日數,可以用Datediff()函數求得由特定日期到今天為止的「經過日數」,或是由今天到特定日期為止的「剩餘日數」。

語法

1
Datediff(datepart, date1, date2)

datepart單位來取得date1date2的差額,datepart的單位與Dateadd()函數一樣,可以指定yearmonthday

求剩餘日數

顯示到月底為止的剩餘日數

1
2
3
4
5
--月底為止的剩餘日數 (convert()組字串求月底日期)
select DATEDIFF(DAY, GETDATE(),DATEADD(DAY, -1, DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1'))) "剩餘日數"

--月底為止的剩餘日數 (datediff()求月底日期)
select DATEDIFF(DAY, GETDATE(),DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH,0,GETDATE())+1,0))) "剩餘日數"

Convert()組字串求月底日期順序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--1.下個月
select DATEADD(MONTH, 1, GETDATE())

--2.當月第一天(組字串)
select CONVERT(char(7),GETDATE(),111)+'/1' -- 2023/12/1

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

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

--5.月底為止的剩餘日數
select DATEDIFF(DAY, GETDATE(),DATEADD(DAY, -1, DATEADD(MONTH, 1, CONVERT(char(7),GETDATE(),111)+'/1'))) "剩餘日數"

求月底日期 DATEADD() + DATEDIFF()

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

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)
  • datepart單位來取得date1date2的差額,
  • datepart的單位與Dateadd()函數一樣,可以指定yearmonthday
This post is licensed under CC BY 4.0 by the author.