文章来源:胡同的小窝 

SqlServer中关于时间函数的应用
 
 
SqlServer中关于时间函数的应用
通常在开发数据库应用中,都会涉及到与时间日期相关的查询操作的,
下面就这些常见的问题,总结一下。 首先介绍一下,在SQL Server中处理时间的函数比较常用就这下面几个,熟悉了这些时间函数的使用,
会使你在以后相关的时间日期查询中得心应手滴:getdate()函数:     取得系统当前的日期和时间,返回datetime类型值
year()函数:        取指定时间的年份值,返回整数值
month()函数:       取指定时间的月份值,返回整数值
day()函数:         取指定时间的日期值,返回整数值
datepart()函数:    以整数的形式返回时间的指定部分(年,月,日等)。
dateadd()函数:    通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。
datediff()函数:    返回两个时间以指定时间部分来计算的差值,返回整数值 
下面是一些时间缩写符号的意义和取值范围
yy 1753-9999 年份 
qq 1-4 刻 
mm 1-12 月 
dy 1-366 日 
dd 1-31 日 
wk 1-54 周 
dw 1-7 周几 
hh 0-23 小时 
mi 0-59 分钟 
ss 0-59 秒 
ms 0-999 毫秒 
下面分别用例子说说上面的函数用法:
getdate()函数: 取得系统当前的日期和时间,返回datetime类型值
用法:getdate() 
例子: 输出当前时间日期
select getdate() as now
输出结果: 
now
2006-08-04 10:11:59.253
(1 row(s) affected) year(),month(),day()函数:
用法:year(param),month(param),day(param) 
参数说明:所有参数param都是个时间日期值
上面三个函数用法都很相似
我举一个例子:输入当前年份值
select year(getdate()) as [now year]
输出结果:
now year
2006
(1 row(s) affected) datepart()函数:以整数的形式返回时间的指定部分(年,月,日等)。
用法:datepart(datepart,date) 
参数说明:datepart时要返回的时间的部分,常用取值year、month、day、hour、minute。 
date是所指定的时间。 
例子: 
SELECT DATEPART(month, GETDATE()) AS [month] 
输出结果: 
Month
8 
(1 row(s) affected) dateadd()函数:通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。
用法:dateadd(datepart,number,date) 
参数说明:datepart(同上) 
date(同上) 
number要增加的值,整型,可正可负,正值返回date之后的时间值,负值返回date 
之前的时间值 
例子: 
select getdate() as [today] 
select dateadd(day,-1,getdate())   as [yesterday]
select dateadd(day,1,getdate())   as [tomorrow]
输出: 
today 
1999-11-21 19:42:41.410 
(1 row(s) affected) yesterday 
1999-11-20 19:42:41.410 
(1 row(s) affected) tomorrow 
1999-11-22 19:42:41.410 
(1 row(s) affected) datediff()函数:返回两个时间以指定时间部分来计算的差值。返回整数值。如1991-6-12和1991-6-21之间以
天来算相差9天,1998-6-12和1999-6-23按年算相差1年,1999-12-1和1999-3-12按月算相差9个月 
用法:datediff(darepart,date1,date2) 
参数说明:datepart(同上) 
date1、date2(同上date) 
例子:相差几个月 
select datediff(month,'1991-6-12','1992-6-21') as [month] 
输出: 
month 
12 
(1 row(s) affected) 下面是一些特殊时间日期查询的用法总结:
1.一个月第一天的
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)2.本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)3.一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)4.季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)5.当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)6.上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))7.去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))8.本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))9.本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))10.本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)