/*日期和时间处理函数   

常用的日期和时间处理函数

函数 说明   

dateadd() 添加日期(天,周等)    

datediff() 计算两个日期的差    

datename() 返回部分日期的字符串表示    

datepart() 返回日期的一部分(星期几、月、年等)    

day() 返回日期中的天=datepart(day,)    

getdate() 返回当前的日期和时间    

month() 返回日期中的月=datepart(month,)    

year() 返回日期中的年=datepart(year,)

其中函数datediff()、datename() and datepart(),要求把日期成分传递给他们。下表为支持的日期成分。

日期成分 缩写   

天 dd or d 

年中的天 dy or y    

时 hh    

毫秒 ms    

分 mi or n    

月份 m or mm    

季度 q or qq    

秒 ss or s    

周 wk or ww    

周中的天(仅用于datepart()) dw or w    

年 yy or yyyy

T-SQL支持以下几种日期和串表示格式   

2006-08-17;    

august 17,2006;    

20060817;    

8/17/2006; 此种表示方式避免使用。*/

--example:   

--返回指字日期的成分    

select getdate(); --返回当前日期及时间    

select datename(d,getdate()); --返回今天是几号    

select day(getdate()); --返回今天是几号    

select datename(y,getdate()); --返回今年有多少天    

select datename(hh,getdate()); --返回现在几点    

select datename(ms,getdate()); --返回现在提毫秒数    

select datename(q,getdate()); --返回季度    

select datename(s,getdate()); --返回秒数    

select datename(dw,getdate()); --返回今天是星期几    

select datename(w,getdate()); --返回今天是星期几    

select datepart(w,getdate()); --以数字表示今天是星期几    

select datename(ww,getdate()); --返回今天周数    

select datepart(ww,getdate()); --返回今天周数    

select datepart(yy,getdate()); --返回今年的年份    

select '今年是'+datename(yy,getdate())+'年'+'第'+datename(ww,getdate())+'周'; --返回今年是2013年第53周

--datediff()的使用   

select datediff(d,getdate(),'20140819'); --返回今天到20140819的天数

--example:   

select cust_id,order_num    

from orders    

where order_date='20050901' --此时要求数据库中存储的时间为:0:00.000 如不是刚匹配不成功

--解决方法   

select cust_id,order_num    

from orders    

where datediff(day,order_date,'20050901')=0 --比较两个日期的天数差别为0的,

--同理,查询2005年9月份的订单   

select cust_id,order_num    

from orders    

where datediff(month,order_date,'20050901')=0 --month可简写为:m    

--等同于    

select cust_id,order_num    

from orders    

where year(order_date)=2005 and month(order_date)=9;


--取当月的最后一天

DECLARE @a DATETIME

SET @a='2017-02-1'

 SELECT DATEADD(mm, DATEDIFF(month, '20161231', @a), '20161231');

 select DATEDIFF(month, '20161231', @a)