SQLServer 日期查询
SQLServer 日期函数大全
统计语句
- 统计当前【> 当天 00 点以后的数据】
SELECT * FROM 表 WHERE CONVERT (Nvarchar, dateandtime, 111) = CONVERT (Nvarchar, GETDATE (), 111) ORDER BY dateandtime DESC
- 统计本周
SELECT * FROM 表 WHERE datediff (week,[dateadd],getdate ())=0
- 统计本月
SELECT * FROM 表 WHERE datediff (month,[dateadd],getdate ())=0
- 统计当前
SELECT * FROM 表 WHERE datediff (day,[dateadd],getdate ())=0
Select * From table with(nolock) Where Convert(varchar(10),[CreateTime],120) = Convert(varchar(10),getDate(),120)
时间函数
- 当前系统日期、时间
select getdate()
- dateadd 在向指定日期加上一段时间的基础上,返回新的 datetime 值,例如:向日期加上 2 天
select dateadd (day,2,'2004-10-15') -- 返回:2004-10-17 00:00:00.000
- datediff 返回跨两个指定日期的日期和时间边界数
select datediff (day,'2004-09-01','2004-09-18') -- 返回:17
- datepart 返回代表指定日期的指定日期部分的整数
SELECT DATEPART (month, '2004-10-15') -- 返回 10
- datename 返回代表指定日期的指定日期部分的字符串
SELECT datename (weekday, '2004-10-15') -- 返回:星期五
- 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')
- 求相差天数
select datediff(day,'2004-01-01',getdate())
- 一个月第一天的
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
- 本周的星期一
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
select dateadd(wk,datediff(wk,0,getdate()),6)
- 一年的第一天
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
- 季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
- 当天的半夜
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
- 上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
- 去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
- 本月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
- 本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
- 本月的第一个星期一
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
- 查询本周注册人数
select count(*) from [user]
where datediff(week,create_day-1,getdate())=0
- 上周注册人数
select count(*) from [user]
where datediff(week,create_day-1,getdate())=1
- 本月注册人数
select count(*) from [user]
where datediff(month,create_day,getdate())=0
- 上月注册人数
select count(*) from [user]
where datediff(month,create_day,getdate())=1
如果要效率,用一下方式
- 查询本周注册人数
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))
- 上周注册人数
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))
- 本月注册人数
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)))
- 上月注册人数
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))
- 本周
select count(*) from User
where datediff(dd,create_day,getdate()) <= datepart(dw,getdate())
- 上周
select count(*) from User
where datediff(dd,create_day,(getdate() - datepart(dw,getdate()))) <= 7
- 本月
select count(*) from User
where datepart(mm,create_day) = datepart(mm,getdate())
- 上月
select count(*) from User
where datepart(mm,create_day) = datepart(mm,getdate()) - 1
- 本周注册人数
select count(*) from [User]
where datediff(dd,create_day,getdate()) <= datepart(dw,getdate())
- 上周注册人数
select count(*) from [User]
where datediff(dd,create_day,(getdate() - datepart(dw,getdate()))) <= 7
- 本月注册人数
select count(*) from [User]
where datepart(mm,create_day) = datepart(mm,getdate())
- 上月注册人数
select count(*) from [User]
where datepart(mm,create_day) = datepart(mm,getdate()) - 1
- 查询今日所有
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
系统函数
系统函数 | 函数 | 参数 / 功能 |
---|---|---|
getDate | ( ) | 返回系统目前的日期与时间 |
DateDiff | (interval,date1,date2) | 以 interval 指定的方式,返回date2 与date1 两个日期之间的差值 date2-date1 |
DateAdd | (interval,number,date) | 以 interval 指定的方式,加上 number 之后的日期 |
DatePart | (interval,date) | 返回日期 date 中,interval 指定部分所对应的整数值 |
DateName | (interval,date) | 返回日期 date 中,interval 指定部分所对应的字符串名称 |
参数 interval 的设定值
值 | 缩写(Sql Server) | Access 和 ASP | 说明 |
---|---|---|---|
Year | Yy | yyyy | 年 |
Quarter | q | 季 | |
Month | Mm | m | 月 |
Day of year | Dy | y | 一年的日数,一年中的第几日 |
Day | Dd | d | 日 |
Weekday | Dw | w | 一周的日数,一周中的第几日 |
Week | Wk | ww | 周,一年中的第几周 |
Hour | Hh | h | 时 |
Minute | Mi | n | 分钟 |
Second | Ss | s | 秒 |
Millisecond | Ms | - | 毫秒 |
access 和 asp 中用 date () 和 now () 取得系统日期时间;其中 DateDiff,DateAdd,DatePart 也同是能用于 Access 和 asp 中,这些函数的用法也类似