logo

Gavin Lee

春节

SQLServer 日期查询

2017-08-17 Views SQL Server | 数据库1267字7 min read

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 Qq 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 中,这些函数的用法也类似

EOF