• 售前

  • 售后

热门帖子
入门百科

SQLServer 日期函数大全(小结)

[复制链接]
123456881 显示全部楼层 发表于 2021-8-14 14:29:28 |阅读模式 打印 上一主题 下一主题
一、统计语句

1、--统计当前【>当天00点以后的数据】
  1. SELECT * FROM 表 WHERE CONVERT(Nvarchar, dateandtime, 111) = CONVERT(Nvarchar, GETDATE(), 111)   ORDER BY dateandtime DESC
复制代码
2、--统计本周
  1. SELECT * FROM 表 WHERE datediff(week,[dateadd],getdate())=0
复制代码
3、--统计本月
  1. SELECT * FROM 表 WHERE datediff(month,[dateadd],getdate())=0
复制代码
4、统计当前
  1. SELECT * FROM 表 WHERE datediff(day,[dateadd],getdate())=0
  2. Select * From table with(nolock) Where Convert(varchar(10),[CreateTime],120) = Convert(varchar(10),getDate(),120)
复制代码
二、时间函数

1、当前系统日期、时间
  1. select getdate()
复制代码
2、dateadd   在向指定日期加上一段时间的基础上,返回新的 datetime 值,比方:向日期加上2天
  1. select dateadd(day,2,'2004-10-15')   --返回:2004-10-17 00:00:00.000
复制代码
3、datediff 返回跨两个指定日期的日期和时间界限数
  1. select datediff(day,'2004-09-01','2004-09-18')    --返回:17
复制代码
4、datepart 返回代表指定日期的指定日期部门的整数
  1. SELECT DATEPART(month, '2004-10-15')   --返回 10
复制代码
5、datename 返回代表指定日期的指定日期部门的字符串
  1. SELECT datename(weekday, '2004-10-15')   --返回:星期五
复制代码
6、day(), month(),year() --可以与datepart对照一下
  1. select 当前日期=convert(varchar(10),getdate(),120),
  2. select 当前时间=convert(varchar(8),getdate(),114),
  3. select datename(dw,'2004-10-15')
  4. select 本年第多少周=datename(week,'2004-10-15'),
  5. select 今天是周几=datename(weekday,'2004-10-15')
复制代码
7、求相差天数
  1. select   datediff(day,'2004-01-01',getdate())
复制代码
8、一个月第一天的
  1. SELECT   DATEADD(mm,   DATEDIFF(mm,0,getdate()),   0)
复制代码
9、本周的星期一
  1. SELECT   DATEADD(wk,   DATEDIFF(wk,0,getdate()),   0)  
  2. select   dateadd(wk,datediff(wk,0,getdate()),6)  
复制代码
10、一年的第一天
  1. SELECT   DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0)
复制代码
11、季度的第一天
  1. SELECT   DATEADD(qq,   DATEDIFF(qq,0,getdate()),   0)
复制代码
12、当天的半夜
  1. SELECT   DATEADD(dd,   DATEDIFF(dd,0,getdate()),   0)
复制代码
13、上个月的末了一天
  1. SELECT   dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),   0))
复制代码
14、客岁的末了一天
  1. SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate()),   0))
复制代码
15、本月的末了一天
  1. SELECT   dateadd(ms,-3,DATEADD(mm,   DATEDIFF(m,0,getdate())+1,   0))
复制代码
16、本年的末了一天
  1. SELECT   dateadd(ms,-3,DATEADD(yy,   DATEDIFF(yy,0,getdate())+1,   0))
复制代码
17、本月的第一个星期一
  1. select   DATEADD(wk,  DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),   0)
复制代码
18、查询本周注册人数
  1. select   count(*)   from   [user]  
  2. where   datediff(week,create_day-1,getdate())=0
复制代码
19、上周注册人数
  1. select   count(*)   from   [user]  
  2. where   datediff(week,create_day-1,getdate())=1
复制代码
20、本月注册人数
  1. select   count(*)   from   [user]  
  2. where   datediff(month,create_day,getdate())=0
复制代码
21、上月注册人数
  1. select   count(*)   from   [user]  
  2. where   datediff(month,create_day,getdate())=1
复制代码
假如要效率,用一下方式
22、查询本周注册人数
  1. select   count(*)   from   [user]  
  2. where   create_day>=dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))  
  3. and   create_day<dateadd(day,9-datepart(weekday,getdate()),convert(varchar,getdate(),112))
复制代码
23、上周注册人数
  1. select   count(*)   from   [user]  
  2. where   create_day>=dateadd(day,-5-datepart(weekday,getdate()),convert(varchar,getdate(),112))  
  3. and   create_day<dateadd(day,2-datepart(weekday,getdate()),convert(varchar,getdate(),112))
复制代码
24、本月注册人数
  1. select   count(*)   from   [user]  
  2. where   create_day>=dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))  
  3. and   create_day<dateadd(month,1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))
复制代码
25、上月注册人数
  1. select   count(*)   from   [user]  
  2. where   create_day>=dateadd(month,-1,dateadd(day,1-day(getdate()),convert(varchar,getdate(),112)))  
  3. and   create_day<dateadd(day,1-day(getdate()),convert(varchar,getdate(),112))
复制代码
26、本周
  1. select   count(*)   from   User  
  2. where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate())
复制代码
27、上周
  1. select   count(*)   from   User  
  2. where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7
复制代码
28、本月
  1. select   count(*)   from   User  
  2. where   datepart(mm,create_day)   =   datepart(mm,getdate())
复制代码
29、上月
  1. select   count(*)   from   User  
  2. where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1
复制代码
30、本周注册人数
  1. select   count(*)   from   [User]  
  2. where   datediff(dd,create_day,getdate())   <=   datepart(dw,getdate())
复制代码
31、上周注册人数
  1. select   count(*)   from   [User]  
  2. where   datediff(dd,create_day,(getdate()   -   datepart(dw,getdate())))   <=   7
复制代码
32、本月注册人数
  1. select   count(*)   from   [User]  
  2. where   datepart(mm,create_day)   =   datepart(mm,getdate())
复制代码
33、上月注册人数
  1. select   count(*)   from   [User]  
  2. where   datepart(mm,create_day)   =   datepart(mm,getdate())   -   1
复制代码
34、查询本日所有
  1. SELECT * from feedback WHERE (DATEDIFF(d,fedtime,GETDATE())=0) ORDER BY fedid DESC
  2. month(create_day)=month(getdate())本月  
  3. 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分析
YearYyyyyy年 1753 ~ 9999
QuarterQqq季 1 ~ 4
MonthMmm月1 ~ 12
Day of yearDyy一年的日数,一年中的第几日 1-366
DayDdd日,1-31
WeekdayDww一周的日数,一周中的第几日 1-7
WeekWkww周,一年中的第几周 0 ~ 51
HourHhh时0 ~ 23
MinuteMin分钟0 ~ 59
SecondSss秒 0 ~ 59
MillisecondMs-毫秒 0 ~ 999

access 和 asp 中用date()和now()取得系统日期时间;此中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也雷同
举例:
  1. 1.GetDate() 用于sql server :select GetDate()
  2. 2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
  3. DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天
  4. 3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
  5. DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
  6. DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天
  7. DatePart('yyyy','2005-7-25 22:56:32')返回值为 2005即2005年
复制代码
Sql 取当天或当月的纪录
表中的时间格式是这样的:2007-02-02 16:50:08.050, 假如直接和当天的时间比力,就总得不到精确数据,但是我们可以把这种格式的时间[格式化]成 2007-02-02,也就是只有年-月-日,然后把当天的时间也格式化成 年-月-日的格式.
这样,思绪就出来了!
我们格式化日期要用到 Convert()这个函数,要用到3个参数,起首来格式化当天的日期,Convert(varchar(10),getDate(),120)
这样我们就可以把当天的日期格式化为: 2007-2-2,然后格式化数据库表中的日期
Convert(varchar(10),TimeFiled,120),末了我们就可以用一条Sql语句得到当天的数据了.
比方:
  1. Select * From VIEW_CountBill Where Convert(varchar(10),[time],120) = Convert(varchar(10),getDate(),120)
复制代码
注意:
Convert()函数中的各个参数的意义,第一个参数,varchar(10)是目标系统所提供的数据范例,包括 bigint 和 sql_variant。不能利用用户定义的数据范例。第二个参数是你要转换的字段,我这里是[time]。末了一个就是格式了,这个值是可选的:20大概120都可以,它遵循的是[ODBC 规范],输入/输出样式为:yyyy-mm-dd hh:mm:ss[.fff]
具体的可以参考Sql Server的联机资助!
======================================================

T-Sql查找表中当月的纪录


思绪:将要查找的时间字段用Month()函数取出此中的月份,然后再取出当前月的月份,对比就OK了
例:
  1. Select * From VIEW_CountBill Where Month([time]) = Month(getDate())
复制代码
本日的所有数据: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
查询本日是今年的第几天: select datepart(dayofyear,getDate())
查询本日是本月的第几天:1. select datepart(dd, getDate())
                                                2.select day(getDate())
查询本周的星期一日期是多少 (注意:指定日期不能是周日,假如是周日会计算到下周一去。所以假如是周日要减一天) SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
查询昨天日期:select convert(char,dateadd(DD,-1,getdate()),111)  //111是样式号,(100-114)
查询本月第一天日期:Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) as firstday
查询本月末了一天日期:Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) as lastday      //修改-3的值会有相应的变化
本月有多少天:select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast((cast(year(getdate()) as varchar)+'-'+cast(month(getdate()) as varchar)+'-01' ) as datetime ))))
求两个时间段相差几天:select datediff(day,'2012/8/1','2012/8/20') as daysum
在指定的日期上±N天:select convert(char,dateadd(dd,1,'2012/8/20'),111) as riqi    //输出2012/8/21
在指定的日期上±N分钟:select dateadd(mi,-15,getdate())  //查询当前时间15分钟之前的日期
指定时间 : select  * from 表名 where 时间字段 >= to_date('yyyy-MM-dd','1900-01-01');

本日
  1. select * from 表名 where to_days(时间字段名) = to_days(now());
复制代码
昨天
  1. SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1
复制代码
近7天
  1. SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)
复制代码
近30天
  1. SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
复制代码
本月
  1. SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
复制代码
上一月
  1. SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1
复制代码
查询本季度数据
  1. select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());
复制代码
查询上季度数据
  1. select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
复制代码
查询本年纪据
  1. select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());
复制代码
查询上年纪据
  1. select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year));
复制代码
查询当前这周的数据
  1. SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());
复制代码
查询上周的数据
  1. SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;
复制代码
查询上个月的数据
  1. select name,submittime from enterprise where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')
  2. select * from user where DATE_FORMAT(pudate,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ;
  3. select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now())
  4. select * from user where MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now())
  5. select * from user where YEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = YEAR(now()) and MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now())
  6. select * from user where pudate between  上月最后一天  and 下月第一天
复制代码
查询当前月份的数据
  1. select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')
复制代码
查询间隔当前现在6个月的数据
  1. select name,submittime from enterprise where submittime between date_sub(now(),interval 6 month) and now();
复制代码
查询时间区间:
  1. select * from  表   WHERE 时间字段 > '2018-12-11 13:36:31'  and  时间字段  <= '2019-01-09 13:36:31'
复制代码
到此这篇关于SQLServer 日期函数大全(小结)的文章就先容到这了,更多相干SQLServer 日期函数内容请搜索草根技术分享从前的文章或继续欣赏下面的相干文章希望各人以后多多支持草根技术分享!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作