SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()

SQL Server中的日期函数

DATEDIFF() 函数、GETDATE() 函数、DATEADD() 函数、DATEPART() 函数

其中参数简写的值 (参数英文写法和简写均可)(概括不全仅列举部分)

SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()_第1张图片

接下来用一道应用题分析各个函数的用法

已知有表Record记录某网吧上网开始时间和结束时间

SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()_第2张图片


1、DATEDIFF() 函数返回两个日期之间的时间

格式:  

例句: 

SELECT DATEDIFF(day,'2017-04-20','2017-04-25') AS DiffDate

得到结果  :       得到的结果为enddate-startdate  的值(25-20=5)


2、 GETDATE() 函数用于返回当前的时间和日期

SELECT DATEDIFF(day,'2017-04-20',GETDATE()) AS DiffDate

得到的结果同上,此时系统当前日期为2017-04-25

以下为 DATEDIFF( )函数 和 GETDATE( )函数相结合的情况:

--a1.查询卡号为0023_ABC 这个月的上机次数
select count(CardID) as 上机次数 from Record 
where CardID = '0023_ABC' and DATEDIFF(mm,BeginTime,getdate()) = 0

--a2.查询卡号为0023_ABC 上个月的上机次数
select count(CardID) as 上机次数 from Record 
where CardID = '0023_ABC' and DATEDIFF(mm,BeginTime,getdate()) = 1

--b1.上个月为止所有上机信息记录
select * from Record where DATEDIFF(m,BeginTime,GETDATE())<=1

--b2.这个月为止所有上机信息记录
select * from Record where DATEDIFF(m,BeginTime,GETDATE())<=0

--c1.两天内上机信息记录
select * from Record where DATEDIFF(dd,BeginTime,GETDATE())<=2

--c2.查询24小时之内上机的人员卡号和机器ID列表
select CardID,ComputerID from Record where datediff(hh,BeginTime,getdate())<=24


注意:从a1、b1、中看出,月份的表达简写 mm 和 m 都是正确的。
这个月顾名思义即月份数相减等于0 
上个月顾名思义即月份数相减等于1   以此类推进行分析,不再举例

a1.图 :         a2.图 :

b1.图 :基于2017-04-25的日期 <= 1 就是3月到4月中所用的信息记录。
               SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()_第3张图片

b2.图 :<= 0 就是4月中所用的信息记录。

              
c1.图 :

              

c2.图 :

             


3、 DATEADD( ) 函数在日期中添加或减去指定的时间间隔

格式:     

number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数

例如可以使用 DateAdd( )从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间


--d1.我们希望向 BeginTime 添加 2 天 并重命名该列为 NewBeginTime

SELECT id,DATEADD(day,2,BeginTime) AS NewBeginTime FROM Record


d1.图:

               SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()_第4张图片   可以看出在原有BeginTime列上“日”中各自增加了两天。

  DateAdd 函数不会返回无效日期。
---如下示例将在id为6的 4月25日加上6天。即为 4月31日,然而4月只有30天


--d2.将在id为6的 4月25日 基础上加上6天

SELECT id,DATEADD(day,6,BeginTime) AS NewBeginTime FROM Record where id = 6

d2.图:  因为4月没有31天,故直接到5月1日。


若是希望返回过去的时间,则讲number值设为负数。

--d3.如下示例将在id为6的 4月25日减去6天

SELECT id,DATEADD(day,-6,BeginTime) AS NewBeginTime FROM Record where id = 6


d3.图:

4、 DATEPART( ) 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等

格式:


--e1.将 EndTime 的分钟数单独抽取出来

SELECT id,DATEPART(mi,EndTime) AS NewEndTime from Record

e1.图:

    SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()_第5张图片  

    因为 id=1 的 EndTime 值为2017-03-22 12:30:00,其它都为整点。故只有第一列返回值是30

--e2.分离出 EndTime 的 年、月、日、时、分、秒

SELECT DATEPART(yyyy,EndTime) AS EndYear,
DATEPART(mm,EndTime) AS EndMonth,
DATEPART(dd,EndTime) AS EndDay,
DATEPART(hh,EndTime) AS EndHour,
DATEPART(mi,EndTime) AS EndMinute,
DATEPART(ss,EndTime) AS EndSecond
FROM Record


e2.图:

    SQLserver 中的日期函数--DATEDIFF()、GETDATE() 、DATEADD() 、DATEPART()_第6张图片

    

    










你可能感兴趣的:(数据库)