数据库SQL语句中根据当前日期计算其他日期小结
问题描述:我们在写存储过程和函数的时候经常会碰到利用当前日期计算出上周开始日期、结束日期,或者计算上个月的开始日期结束日期等问题。最近写了几个存储过程和函数,其中都涉及到了日期计算问题,在这里简单做一个总结,留待以后查阅。
涉及知识分享:SQL中的日期计算主要涉及到GETDATE()、DATEDIFF()和DATEADD()三个方法,利用这三个方法的巧妙组合就可以得到我们想要的日期结果。首先,简单介绍一下这三个方法的定义:
(1)GETDATE():
定义:从 SQL Server 返回当前的时间和日期;
语法:GETDATE(),没有参数;
示例:select GETDATE();
结果:2016-04-26 13:35:14.670
(2)DATEDIFF()
定义:返回两个日期之间的天数;
语法:DATEDIFF(datepart,startdate,enddate), startdate 和 enddate 参数是合法的日期表达式。datepart 参数可以是下列的值:

示例:select DATEDIFF(dd,'2016-4-21','2016-4-26');
结果:5
(3)DATEADD():
定义:在日期中添加或减去指定的时间间隔;
语法:DATEADD(datepart,number,date), date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。datepart 参数与DATEDIFF的datepart 参数一致,参见上表。
示例:select DATEADD(dd,5,'2016-4-21');
结果:2016-04-26 00:00:00.000
具体日期计算示例:
(1)得到当前日期:
SQL: select GETDATE();
结果:2016-04-26 13:47:06.903
(2)得到本周周一日期:
SQL: select DATEADD(week,DATEDIFF(week,0,GETDATE()),0)
结果:2016-04-25 00:00:00.000
(3)得到上周周一日期(在本周周一的基础上剪掉一周即可):
SQL: select DATEADD(week,-1,DATEADD(week,DATEDIFF(week,0,GETDATE()),0))
结果:2016-04-18 00:00:00.000
(4)得到上周周日日期,举其中两种思维方法:
第一种:先得到本周周日的日期,然后减一周
SQL: select dateadd(week,-1,DATEADD(week,DATEDIFF(week,0,getdate()),6))
结果:2016-04-24 00:00:00.000
第二种:用本周周一的日期减掉1秒
SQL: select DATEADD(ss,-1,DATEADD(week,DATEDIFF(week,0,GETDATE()),0))
结果:2016-04-24 23:59:59.000
(5)得到本月第一天日期:
SQL: select DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)
结果:2016-04-01 00:00:00.000
(6)得到上个月第一天日期(即在本月第一天日期取月的间隔数时减一即可):
SQL: select DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0)
结果:2016-03-01 00:00:00.000
(7)得到上个月最后一天日期(即在本月第一天的基础上减掉一秒即可):
SQL: select DATEADD(SS,-1,DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0))
结果:2016-03-31 23:59:59.000
关于计算两个日期间隔数DATEDIFF函数的参数0对应的日期时间问题:
在使用DATEDIFF计算日期时经常会用到参数0,参数0对应的日期是默认的日期1900-00-00 00:00:00.000,具体得到的计算间隔数由datepart参数决定。例如:
SQL:select DATEDIFF(yy,0,GETDATE()) as countYear,DATEDIFF(mm,0,GETDATE()) as countMonth,DATEDIFF(dd,0,GETDATE()) as countDay,DATEDIFF(week,0,GETDATE()) as countWeek,DATEDIFF(hh,0,GETDATE()) as countHour
结果:
| countYear | countMonth | countDay | countWeek | countHour | |
| 1 | 116 | 1395 | 42485 | 6069 | 1019649 |
数据库SQL语句中根据当前日期计算其他日期小结的更多相关文章
- 数据库SQL语句中 查询选修了全部课程的学生的学号和姓名
一.SQL语言查询选修了全部课程的学生的学号和姓名. 两种解决途径: 第一种: 我们可以表示为在SC表中某个学生选修的课程数等于C表中课程总数.相应的SQL语言如下: select S#,SNAME ...
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- SQL语句中日期的计算方法大全
sql语句中的日期处理一.日期處理函數1.日期增減函數 dateadd(datepart,number,dtae) datepart:是規定應向日期的哪一部分返回新值的參數.下列是sql server ...
- 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
- 数据库 SQL语句优化
温馨提示:本篇内容均来自网上,本人只做了稍微处理,未进行细致研究,仅当做以后不备之需,如若你喜欢可尽情转走. 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图 ...
- (转载)SQL语句中Group by语句的详细介绍
转自:http://blog.163.com/yuer_d/blog/static/76761152201010203719835 SQL语句中Group by语句的详细介绍 ...
- SQL点滴35—SQL语句中的exists
原文:SQL点滴35-SQL语句中的exists 比如在Northwind数据库中有一个查询为 SELECT c.CustomerId,CompanyName FROM Customers c WHE ...
- 数据库SQL语句性能优化
选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下 ...
- sql语句中的[]中括号(转)
下面有关sql语句中[]的信息适用于Sql Server.Access等多种数据库. 1.sql语句中加[]是为了防止歧义,避免与系统保留关键字冲突,使计算机能识别.sql语句中有些字段可能是关键字, ...
随机推荐
- Java 如何跳出多重嵌套循环体?
1. 在最外层循环语句前定义一个标号,循环体内任意位置都可以使用带有标号的break语句跳出外层循环,结束整个循环. System.out.println("MainClass1 Start ...
- Tomcat服务启动成功,但访问index.jsp出错 (jspInit)
本文引用自 --> http://zhouhaitao.iteye.com/blog/1164736 Tomcat服务启动成功,但访问index.jsp出错 环境:Tomcat6 + jdk6 ...
- C语言解析Ini格式文件
引用别人的博文: http://www.open-open.com/lib/view/open1402278076447.html 可以解析 INI 格式的字符串.解析文件.保存到文件. 下面是头文件 ...
- HTML5 --照抄书里的代码但函数无法执行、求分析( Uncaught ReferenceError: xxx is not defined)
在js文件里写一个方法传参数: moveElement(id,name,price) { alert("id:"+id+"name:"+name+"p ...
- 学习笔记-----Android的View绘制过程
边看源码边参考别人的博客等,做一下学习笔记. 要了解View的绘制,首先得知道View树的结构:(可以参考http://blog.csdn.net/qinjuning/article/details/ ...
- js-url打开方式
引用自 : 老张的博客 *.location.href 用法: top.location.href="url" 在顶层页面打开url(跳出框架) self.loc ...
- 利用matlab摄像机标定
(1)输入图像 "Image names"键 Matlab的图形窗口显示出20幅靶标图像 (2) 提取角点 "Extract grid corners"键. 输 ...
- mysql,实现数据库检索结果添加自增的序号
select t2.rowno from( select (@rownum:=@rownum+1) as rowno, t1.id from news t1 ,(select (@rownum ...
- solr 中文分词 IKAnalyzer
solr中文分词器ik, 推荐资料:http://iamyida.iteye.com/blog/2220474?utm_source=tuicool&utm_medium=referral 使 ...
- JVM常量池
常量池(constant_pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口等中的常量,也包括字符串常量和符号引用.运行时常量池是方法区的一部分 ...