SQL中DATEADD和DATEDIFF的使用方法

qq_23944441發表於2018-05-30

DATEADD函式計算一個日期通過給時間間隔加減來獲得一個新的日期,DATEDIFF函式計算兩個日期之間的小時、天、周、月、年等時間間隔總數。

1、SQL Server DATEADD() 函式

定義和用法

DATEADD() 函式在日期中新增或減去指定的時間間隔。

語法

DATEADD(datepart,number,date)

date 引數是合法的日期表示式。number 是您希望新增的間隔數;對於未來的時間,此數是正數,對於過去的時間,此數是負數。

datepart 引數可以是下列的值:

datepart縮寫
yy, yyyy
季度qq, q
mm, m
年中的日dy, y
dd, d
wk, ww
星期dw, w
小時hh
分鐘mi, n
ss, s
毫秒ms
微妙mcs
納秒ns

例項

假設我們有下面這個 "Orders" 表:

OrderIdProductNameOrderDate
1'Computer'2008-12-29 16:25:46.635

現在,我們希望向 "OrderDate" 新增 2 天,這樣就可以找到付款日期。

我們使用如下 SELECT 語句:

SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate
FROM Orders

結果:

OrderIdOrderPayDate
12008-12-31 16:25:46.635
date也可以使用函式,比如今天是2016-02-21.


2、SQL Server DATEDIFF() 函式

定義和用法

DATEDIFF() 函式返回兩個日期之間的天數。

語法

DATEDIFF(datepart,startdate,enddate)

startdate 和 enddate 引數是合法的日期表示式。

datepart 引數可以是下列的值:

datepart縮寫
yy, yyyy
季度qq, q
mm, m
年中的日dy, y
dd, d
wk, ww
星期dw, w
小時hh
分鐘mi, n
ss, s
毫秒ms
微妙mcs
納秒ns

例項

例子 1

使用如下 SELECT 語句:

SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

結果:

DiffDate
1

例子 2

使用如下 SELECT 語句:

SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate

結果:

DiffDate
-1


DATEADD和DATEDIFF可以組合獲取指定時間。

本月的第一天:

[html] view plain copy
  1. Select dateadd(ms,0,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) as 時間  

本月的最後一天:

[html] view plain copy
  1. Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))  

上個月的最後一天:

  1. Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) as 時間  

去年的最後一天:

[html] view plain copy
  1. Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))   
本年的最後一天:
[html] view plain copy
  1. Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))  

2016-01-21的12個月前的那個月的第一天:
[html] view plain copy
  1. Select dateadd(mm,-12,DATEADD(mm, DATEDIFF(mm,0,'2016-01-21'), 0)) as 時間  


一年中指定周的第一天:

  1. DECLARE @本年第一天 datetime,@本年第一天是星期幾 int,@Week int  
  2. set @本年第一天=DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0))  
  3. set @本年第一天是星期幾=DATEPART(dw,DATEADD(ms,0,DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0)))  
  4. set @Week=1--今年第一週  
  5. select DATEADD(day,(@Week-1)*7-@本年第一天是星期幾+2,@本年第一天)  



轉載:https://blog.csdn.net/Gordennizaicunzai/article/details/50710130

相關文章