Sql Server 日期函数

// 一、统计语句
// 1、//统计当前【>当天00点以后的数据】
SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111) ORDER BY dateandtime DESC
// 2、//统计本周
SELECT * FROM 表 WHERE datediff(week, [dateadd], getdate()) = 0
// 3、//统计本月
SELECT * FROM 表 WHERE datediff(month, [dateadd], getdate()) = 0
// 4、统计当前
SELECT * FROM 表 WHERE datediff(day, [dateadd], getdate()) = 0
Select * From table with(nolock) Where Convert(varchar(10), [CreateTime], 120) = Convert(varchar(10), getDate(), 120)
// 二、时间函数
// 1、当前系统日期、时间
select getdate()
// 2、dateadd   在向指定日期加上一段时间的基础上,返回新的 datetime 值,例如:向日期加上2天
select dateadd(day, 2, '2004-10-15') //返回:2004-10-17 00:00:00.000
// 3、datediff 返回跨两个指定日期的日期和时间边界数
select datediff(day, '2004-09-01', '2004-09-18') //返回:17
// 4、datepart 返回代表指定日期的指定日期部分的整数
SELECT DATEPART(month, '2004-10-15') //返回 10
// 5、datename 返回代表指定日期的指定日期部分的字符串
SELECT datename(weekday, '2004-10-15') //返回:星期五
// 6、day(), month(),year() //可以与datepart对照一下
select 当前日期 = convert(varchar(10), getdate(), 120),
    select 当前时间 = convert(varchar(8), getdate(), 114),
    select datename(dw, '2004-10-15')
select 本年第多少周 = datename(week, '2004-10-15'),
    select 今天是周几 = datename(weekday, '2004-10-15')
// 7、求相差天数
select datediff(day, '2004-01-01', getdate())
// 8、一个月第一天的
SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
// 9、本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk, 0, getdate()), 0)
select dateadd(wk, datediff(wk, 0, getdate()), 6)
// 10、一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
// 11、季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq, 0, getdate()), 0)
// 12、当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
// 13、上个月的最后一天
SELECT dateadd(ms, -3, DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0))
// 14、去年的最后一天
SELECT dateadd(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0))
// 15、本月的最后一天
SELECT dateadd(ms, -3, DATEADD(mm, DATEDIFF(m, 0, getdate()) + 1, 0))
// 16、本年的最后一天
SELECT dateadd(ms, -3, DATEADD(yy, DATEDIFF(yy, 0, getdate()) + 1, 0))
// 17、本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, getdate()), getdate())), 0)
// 18、查询本周注册人数
select count( * ) from[user]
where datediff(week, create_day - 1, getdate()) = 0
// 19、上周注册人数
select count( * ) from[user]
where datediff(week, create_day - 1, getdate()) = 1
// 20、本月注册人数
select count( * ) from[user]
where datediff(month, create_day, getdate()) = 0
// 21、上月注册人数
select count( * ) from[user]
where datediff(month, create_day, getdate()) = 1
// 如果要效率,用一下方式
// 22、查询本周注册人数
select count( * ) from[user]
where create_day >= dateadd(day, 2 - datepart(weekday, getdate()), convert(varchar, getdate(), 112))
and create_day < dateadd(day, 9 - datepart(weekday, getdate()), convert(varchar, getdate(), 112))
// 23、上周注册人数 
select count( * ) from[user]
where create_day >= dateadd(day, -5 - datepart(weekday, getdate()), convert(varchar, getdate(), 112))
and create_day < dateadd(day, 2 - datepart(weekday, getdate()), convert(varchar, getdate(), 112))
// 24、本月注册人数
select count( * ) from[user]
where create_day >= dateadd(day, 1 - day(getdate()), convert(varchar, getdate(), 112))
and create_day < dateadd(month, 1, dateadd(day, 1 - day(getdate()), convert(varchar, getdate(), 112)))
// 25、上月注册人数
select count( * ) from[user]
where create_day >= dateadd(month, -1, dateadd(day, 1 - day(getdate()), convert(varchar, getdate(), 112)))
and create_day < dateadd(day, 1 - day(getdate()), convert(varchar, getdate(), 112))
// 26、本周
select count( * ) from User
where datediff(dd, create_day, getdate()) <= datepart(dw, getdate())
// 27、上周
select count( * ) from User
where datediff(dd, create_day, (getdate() - datepart(dw, getdate()))) <= 7
// 28、本月
select count( * ) from User
where datepart(mm, create_day) = datepart(mm, getdate())
// 29、上月
select count( * ) from User
where datepart(mm, create_day) = datepart(mm, getdate()) - 1
// 30、本周注册人数
select count( * ) from[User]
where datediff(dd, create_day, getdate()) <= datepart(dw, getdate())
// 31、上周注册人数
select count( * ) from[User]
where datediff(dd, create_day, (getdate() - datepart(dw, getdate()))) <= 7
// 32、本月注册人数
select count( * ) from[User]
where datepart(mm, create_day) = datepart(mm, getdate())
// 33、上月注册人数
select count( * ) from[User]
where datepart(mm, create_day) = datepart(mm, getdate()) - 1
// 34、查询今日所有
SELECT * from feedback WHERE(DATEDIFF(d, fedtime, GETDATE()) = 0) ORDER BY fedid DESC
month(create_day) = month(getdate()) 本月
month(create_day) = month(getdate()) - 1 上月

// 今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0
// 昨天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=1
// 7天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=7
// 30天内的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())<=30
// 本月的所有数据:select * from 表名 where DateDiff(mm,datetime类型字段,getdate())=0
// 本年的所有数据:select * from 表名 where DateDiff(yy,datetime类型字段,getdate())=0

猜你喜欢

转载自my.oschina.net/feiyang2017/blog/1800295