统计在数据库中是最常见也是必不可少的,前段时间用Teechat控件使用统计遇到的一些SQL语句整理一下,重点常用函数有datediff()和datepart(),下面大概讲述下这些函数.
代码如下 | 复制代码 |
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)
|
计算时间的函数中有,年(yy),季(q),月(m),周(ww),时期(w),天(d),时(hh),分(n),秒(s)
getdate():返回当前日期
获取当前月份的天数:
代码如下 | 复制代码 |
select datediff(d,getdate(),dateadd(m,1,getdate())) |
获取当前年,季,月,周,天,时,分,秒:
代码如下 | 复制代码 |
select datepart(yy,getdate()) //年 select datepart(q,getdate()) //季 select datepart(m,getdate()) //月 select datepart(ww,getdate())//周 select datepart(w,getdate()) //星期,从0开始. select datepart(d,getdate()) //天 select datepart(hh,getdate())//时 select datepart(n,getdate()) //分 select datepart(s,getdate()) //秒 |
获取当前天的前后五天日期:
代码如下 | 复制代码 |
select dateadd(dd,5,getdate()) select dateadd(dd,-5,getdate()) |
获取当前日期与目标日期相差的年,月,周,日,时,分,秒:
代码如下 | 复制代码 |
select datediff(yy,'2005-01-01 14:12:01',getdate()) select datediff(q,'2005-01-01 14:12:01',getdate()) select datediff(m,'2005-01-01 14:12:01',getdate()) select datediff(ww,'2005-01-01 14:12:01',getdate()) select datediff(d,'2005-01-01 14:12:01',getdate()) select datediff(hh,'2005-01-01 14:12:01',getdate()) select datediff(n,'2005-01-01 14:12:01',getdate()) select datediff(s,'2005-01-01 14:12:01',getdate()) |
获取当前月份添加的信息:
代码如下 | 复制代码 |
select count(*) as num, Origin from ks_article month(getdate())=DatePart("m",adddate) group by Origin |
附ql server 2008 r2日期时间函数
代码如下 | 复制代码 |
/* Environment: win7 + sql server 2008 r2 --截取一个时间的年,月,日 SELECT DATENAME (DD,GETDATE()) --返回类型为字符型 --用 dateadd 来获得下一个时间或之前的时间日期 select DATEADD (DD , 1 , getdate()) --当前时间的下一天 SELECT DATEDIFF(DD,'2012-07-11 15:03:11.623',GETDATE()) --时间差 SELECT DATENAME(dayofyear,GETDATE()) ,DATEDIFF(dd,'2012-01-01',getdate()) SELECT DATENAME(year, GETDATE()) SELECT ISDATE('2012-07-17') UNION ALL
*/ /* ISDATE ISDATE ( expression ) 确定 datetime 或 smalldatetime 输入表达式是否为有效的日期或时间值。 |