SQLServer 日期函数大全(小结)


Posted in SQL Server onApril 08, 2021

一、统计语句

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

系统函数:

 

函数 参数/功能
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 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m 月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd d 日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh h 时0 ~ 23
Minute Mi n 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999

access 和 asp 中用date()和now()取得系统日期时间;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,这些函数的用法也类似

举例:

1.GetDate() 用于sql server :select GetDate()
2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值为 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值为 5 天
3.DatePart('w','2005-7-25 22:56:32')返回值为 2 即星期一(周日为1,周六为7)
DatePart('d','2005-7-25 22:56:32')返回值为 25即25号
DatePart('y','2005-7-25 22:56:32')返回值为 206即这一年中第206天
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语句得到当天的数据了.
例如:

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了
例:

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');

今天

select * from 表名 where to_days(时间字段名) = to_days(now());

昨天

SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1

近7天

SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)

近30天

SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)

本月

SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )

上一月

SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1

查询本季度数据

select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());

查询上季度数据

select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));

查询本年数据

select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());

查询上年数据

select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year));

查询当前这周的数据

SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());

查询上周的数据

SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;

查询上个月的数据

select name,submittime from enterprise where date_format(submittime,'%Y-%m')=date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y-%m')

select * from user where DATE_FORMAT(pudate,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m') ; 

select * from user where WEEKOFYEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = WEEKOFYEAR(now()) 

select * from user where MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now()) 

select * from user where YEAR(FROM_UNIXTIME(pudate,'%y-%m-%d')) = YEAR(now()) and MONTH(FROM_UNIXTIME(pudate,'%y-%m-%d')) = MONTH(now()) 

select * from user where pudate between  上月最后一天  and 下月第一天

查询当前月份的数据

select name,submittime from enterprise   where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')

查询距离当前现在6个月的数据

select name,submittime from enterprise where submittime between date_sub(now(),interval 6 month) and now();

查询时间区间:

select * from  表   WHERE 时间字段 > '2018-12-11 13:36:31'  and  时间字段  <= '2019-01-09 13:36:31'

到此这篇关于SQLServer 日期函数大全(小结)的文章就介绍到这了,更多相关SQLServer 日期函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

SQL Server 相关文章推荐
mybatis调用sqlserver存储过程返回结果集的方法
May 08 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
Jul 15 SQL Server
SQL中的三种去重方法小结
Nov 01 SQL Server
SQL SERVER存储过程用法详解
Feb 24 SQL Server
SQL CASE 表达式的具体使用
Mar 21 SQL Server
SQL Server内存机制浅探
Apr 06 SQL Server
SQL Server表分区降低运维和维护成本
Apr 08 SQL Server
MSSQL基本语法操作
Apr 11 SQL Server
SQL Server 忘记密码以及重新添加新账号
Apr 26 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
Jun 01 SQL Server
SQL SERVER中常用日期函数的具体使用
SQL Server连接查询的实用教程
SqlServer: 如何更改表的文件组?(进而改变存储位置)
【HBU】数据库第四周 单表查询
Sql-Server数据库单表查询 4.3实验课
SQL Server 数据库实验课第五周——常用查询条件
SQL Server基本使用和简单的CRUD操作
You might like
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
使用js画图之饼图
2015/01/12 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
详解javascript设计模式三:代理模式
2019/03/25 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
详解Python中的序列化与反序列化的使用
2015/06/30 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
简单易懂的python环境安装教程
2017/07/13 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
如何在django中实现分页功能
2020/04/22 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
情人节活动策划方案
2014/02/27 职场文书
党员干部承诺书范文
2014/03/25 职场文书
2014教师年度工作总结
2014/11/10 职场文书
小学班主任事迹材料
2014/12/17 职场文书
多人股份制合作协议书
2016/03/19 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电