counter
counter

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

posted @ 2013-04-08 13:34  bfy  阅读(224)  评论(0编辑  收藏  举报