sql 关于时间的操作
主要是三个函数
1.
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 |
2.
DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
语法
DATEPART(datepart,date)
date 参数是合法的日期表达式。datepart 参数可以是下列的值:
datepart | 缩写 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
纳秒 | ns |
3.
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 |
实例:
--一年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
--上年最后一周
select DATEPART(ww,dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()),0)))
--一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
select datediff(d,'2012-03-01','2012-01-01')
SELECT DATEDIFF(y,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0),getdate())
--每年的第一天是周几
select datepart(w,dateadd(day,-1,'2008-1-1'))
--取上年最后一周数据
SELECT TOP 100
su.ProcessedInput,
max(su.InputSpelling),
su.CityId,
max(su.[Year]),
DATEPART(ww,dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()),0))),
COUNT(su.ProcessedInput) AS Counts
FROM [dbo].[Statistics_UserRecord] AS su
--上年最后一周
WHERE DATEPART(week,su.[Time])= DATEPART(ww,dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()),0)))
GROUP BY su.ProcessedInput,su.CityId
ORDER BY Counts DESC
--取上年最后一周和该年的第一周数据
SELECT TOP 100
su.ProcessedInput,
max(su.InputSpelling),
su.CityId,
max(su.[Year]),
datepart(ww,su.[Time]),
COUNT(su.ProcessedInput) AS Counts
FROM [dbo].[Statistics_UserRecord] AS su
WHERE datediff(week,DATEADD(yy,DATEDIFF(yy,0,getdate()),0),su.[Time])= 0
GROUP BY su.ProcessedInput,su.CityId,su.Time
ORDER BY Counts DESC