sql 语句系列(两个日期之间)[八百章之第十七章]
前言
进入了日期章了。
年月日加减法
分别对原有的日期进行加减法。
sql server
select DATEADD(DAY,-5,HIREDATE) as hd_mimus_5D,
DATEADD(DAY,5,HIREDATE) as hd_plus_5D,
DATEADD(MONTH,-5,HIREDATE) as hd_minus_5M,
DATEDIFF(MONTH,5,HIREDATE) as hd_pulus_5M,
DATEADD(YEAR,-5,HIREDATE) as hd_minus_5Y,
DATEDIFF(YEAR,5,HIREDATE) as hd_pulus_5Y
from emp
where DEPTNO=20
mysql
select HIREDATE -INTERVAL 5 DAY as hd_mimus_5D,
HIREDATE + INTERVAL 5 DAY as hd_plus_5D,
HIREDATE -INTERVAL 5 MONTH as hd_minus_5M,
HIREDATE +INTERVAL 5 MONTH as hd_pulus_5M,
HIREDATE -INTERVAL 5 YEAR as hd_minus_5Y,
HIREDATE +INTERVAL 5 YEAR as hd_pulus_5Y
from emp
where DEPTNO=20
计算两个日期之间的天数
sql server 与 mysql
select DATEDIFF(DAY,word_hd,allen_hd)
from (
select HIREDATE as word_hd
from EMP
where ENAME='WARD'
)x,
(select HIREDATE as allen_hd
from EMP
where ENAME='ALLEN'
) y
在此只是为了介绍一下DATEDIFF函数可以计算两个日期的相差的间隔。
两个日期之间的工作日的天数
1.我们要知道两个日期区间是什么。比如说2月6号到2月23号,那么我们就要得出2月6号到2月23这个区间出来。
2.我们得出区间,那么我们需要遍历区间,然后判断那一天是工作日。
3.我们应该知道工作日是星期一到星期五。
mysql:
select sum(CASE when DATE_FORMAT(DATE_ADD(jones_hd,INTERVAL T100.ID-1 DAY),'%a') in ('Sat','Sun') then 0 else 1 END) as days
from
(select
MAX(case when ename='BLAKE' then HIREDATE end) as blake_hd,
MAX(case when ename='JONES' then HIREDATE end) as jones_hd
from EMP
where ename in ('BLAKE','JONES')
) x,T100
where T100.ID<=DATEDIFF(x.blake_hd,x.jones_hd)+1
看起来有一丢丢复杂,其实不然。
有两个地方你无需关注。
(select
MAX(case when ename='BLAKE' then HIREDATE end) as blake_hd,
MAX(case when ename='JONES' then HIREDATE end) as jones_hd
from EMP
where ename in ('BLAKE','JONES')
)
这一段仅仅是为了得出两个日期,也就是业务。其余部分才是功能。
如果你阅读了前面的章节,那么你仅仅需要关注的是DATE_FORMAT 函数。
sql server
select sum(CASE when
datename(DW,DATEADD(DAY,T100.ID-1,jones_hd)) in ('星期六','星期天') then 0 else 1 END) as days
from
(select
MAX(case when ename='BLAKE' then HIREDATE end) as blake_hd,
MAX(case when ename='JONES' then HIREDATE end) as jones_hd
from EMP
where ename in ('BLAKE','JONES')
) x,T100
where T100.ID<=DATEDIFF(DAY,x.jones_hd,x.blake_hd)+1
可能有人觉得我这里写星期六星期天奇怪哈,那是因为我自己的电脑装的是中文版。英文版是 in ('SATURDATA','SUNDAY')。
知识点:datename函数
计算两个日期之间相差的月份和年份
mysql:
select x.mounths as ms,x.mounths/12 as ys from
(select ((YEAR(max_hir)-YEAR(min_hir))*12+(MONTH(max_hir)-MONTH(min_hir))) as mounths from
(select MIN(HIREDATE) as min_hir,MAX(HIREDATE) AS max_hir
FROM EMP) e
)x
sql server
select DATEDIFF(MONTH,e.min_hir,e.max_hir) as ms,CAST(DATEDIFF(MONTH,e.max_hir,e.min_hir) as decimal )/12 from
(select MIN(HIREDATE) as min_hir,MAX(HIREDATE) AS max_hir
FROM EMP
) e
注:在做除法的时候一定要转换一下数据类型。
计算两个日期之间相差的秒数、分钟数、小时数
mysql 和 sqlserver 通用
select DATEDIFF(day,e.min_hir,e.max_hir)*12 as hrs,DATEDIFF(day,e.min_hir,e.max_hir)*12*60 as mins,DATEDIFF(day,e.min_hir,e.max_hir)*12*60*60 as sec from
(select MIN(HIREDATE) as min_hir,MAX(HIREDATE) AS max_hir
FROM EMP
) e
sql 语句系列(两个日期之间)[八百章之第十七章]的更多相关文章
- sql返回两个日期之间的日期_函数实现
-- Description:返回两段日期之间的所有日期 <Description,,>-- ============================================ ...
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- Java 获取两个日期之间的日期
1.前期需求,两个日期,我们叫他startDate和endDate,然后获取到两个日期之间的日期 /** * 获取两个日期之间的日期 * @param start 开始日期 * @param end ...
- MySQL如何查询两个日期之间的记录
baidu出来的结果多是下面答案:<quote> MySQL中,如何查询两个日期之间的记录,日期所在字段的类型为datetime(0000-00-00 00:00:00) 解决方案: 直接 ...
- java中计算两个日期之间天数的程序设计。
//用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...
- Ios中比较两个日期之间的时间差距
1.比较两个日期之间的时间差距 // 1.日历对象(标识:时区相关的标识) NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIde ...
- iOS 计算两个日期之间的天数问题
//获取当前时间若干年.月.日之后的时间 + (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSIn ...
- JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。
/** * * 文 件 名: AccountDate.java * * 创建时间: 2008-11-18 * * Email : **@163.com */ import java.text.Deci ...
- java计算两个日期之间相隔的天数
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
随机推荐
- python 微信自动发图片,批量发送
自动发送批量的图片给微信联系人,可为自己的文件传输助手 已实现: 可设置发送时间间隔 发送图片数量 指定接收人 下载链接: python批量自动连发图片给微信好友自动发图片-Python文档类资源-C ...
- 4、dubbo的高可用
1.zookeeper宕机与dubbo直连 现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务. 原因: 健壮性 l 监控中心宕掉不影响使用,只是丢失部分采样数据 l 数据库宕掉后, ...
- MK5 机械键盘 说明书
FN + 右箭头 就是加快节奏 FN + ScrLk 就是切换模式
- pfx文件导出pem和私钥,更换网站域名证书
openssl 路径: C:\Program Files\OpenSSL-Win64\bin -- 导出pem证书openssl pkcs12 -in C:\BackUp\Lightning\cert ...
- URL URI URN
总结如下: 1.简写: URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符(或统一资源定位 ...
- 人人都是艺术家!AI工具Doodly让潦草手绘变精美画作
AI绘画界太卷了,一天一个新东西,不久前刚给大家介绍了可以一秒出图的SDXL-Turbo,今天来聊一聊另一位重磅选手Doodly 有用过Stable Diffuison的小伙伴都知道,想要生成一张高质 ...
- Welcome to YARP - 2.2 配置功能 - 配置提供者(Configuration Providers)
目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 ...
- [深度学习] 计算机视觉低代码工具Supervision库使用指北
Supervision库是一款出色的Python计算机视觉低代码工具,其设计初衷在于为用户提供一个便捷且高效的接口,用以处理数据集以及直观地展示检测结果.Supervision库的官方开源仓库地址为: ...
- View之invalidate,requestLayout,postInvalidate
目录介绍 01.invalidate,requestLayout,postInvalidate区别 02.invalidate深入分析 03.postInvalidate深入分析 04.request ...
- 用于vivado的TCL脚本创建工程
用于实现在脚本所在的目录创建工程并初始化工程 点击查看代码 #获取脚本所在的文件 variable My_File [file normalize [info script]] #prj_path_f ...