前言

进入了日期章了。

年月日加减法

分别对原有的日期进行加减法。

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 语句系列(两个日期之间)[八百章之第十七章]的更多相关文章

  1. sql返回两个日期之间的日期_函数实现

    -- Description:返回两段日期之间的所有日期    <Description,,>-- ============================================ ...

  2. Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数

    首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...

  3. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  4. Java 获取两个日期之间的日期

    1.前期需求,两个日期,我们叫他startDate和endDate,然后获取到两个日期之间的日期 /** * 获取两个日期之间的日期 * @param start 开始日期 * @param end ...

  5. MySQL如何查询两个日期之间的记录

    baidu出来的结果多是下面答案:<quote> MySQL中,如何查询两个日期之间的记录,日期所在字段的类型为datetime(0000-00-00 00:00:00) 解决方案: 直接 ...

  6. java中计算两个日期之间天数的程序设计。

    //用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  7. Ios中比较两个日期之间的时间差距

    1.比较两个日期之间的时间差距 // 1.日历对象(标识:时区相关的标识) NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIde ...

  8. iOS 计算两个日期之间的天数问题

    //获取当前时间若干年.月.日之后的时间 + (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSIn ...

  9. JAVA时间日期处理类,主要用来遍历两个日期之间的每一天。

    /** * * 文 件 名: AccountDate.java * * 创建时间: 2008-11-18 * * Email : **@163.com */ import java.text.Deci ...

  10. java计算两个日期之间相隔的天数

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

随机推荐

  1. Java 封装+构造器+this 小测试

    1 package com.bytezero.account; 2 3 4 public class Account 5 { 6 private int id; //账号 7 private doub ...

  2. ffmpeg播放器-音视频解码流程

    目录 音视频介绍 音视频解码流程 FFmpeg解码的数据结构说明 AVFormatContext数据结构说明 AVInputFormat数据结构说明 AVStream数据结构说明 AVCodecCon ...

  3. Java中float和double的精度

    比较基本类型double和float和某一个数是否相等的时候,不要用==或>=或<=,因为double和float都是有精度问题的,计算机只能保存一定位数的小数,这就会存在精度问题. 下面 ...

  4. NJUPT自控第一次积分赛的小总结(二)基于simpleFOC的无刷电机控制

    新人一枚,写的比较水,欢迎大佬指正! 先说一下我用的物料与开发环境吧: 无刷电机:makerbase的2804电机(带AS5600磁编码器) 电机驱动板:simpleFOCmini(学校推荐的) 电池 ...

  5. Linux进程管理、安全

    1.介绍 1.什么是进程 比如: 开发写的代码我们称为程序,那么将开发的代码运行起来.我们称为进程. 总结一句话就是: 当我们运行一个程序,那么我们将运行的程序叫进程. PS1: 当程序运行为进程后, ...

  6. 三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析

    三维模型OBJ格式轻量化压缩在大规模场景的加载和渲染的作用分析 OBJ格式是一种常用的三维模型文件格式,它存储了三维模型的几何信息和纹理坐标等相关属性.在大规模场景中加载和渲染三维模型时,OBJ格式的 ...

  7. 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第6章

    本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 暂无 本章释疑: 暂无,等待你的提问 致谢: MVP 林德熙 MVP 吕毅 sPhinX 相关链接 试读记录

  8. nginx root 和 alias 的区别

    区别: alias 含有rewrite的意思,可以重写掉不存在的路径.( nginx rewrite请看这里) 比如正常访问的地址是: http://ip:port 当我想让 http://ip:po ...

  9. Oracle数据库对比MySQL

    基本 Oracle默认端口:1521 默认用户:system MySQL默认端口:3306 默认用户:root 连接MySQL: mysql -u root -p -- 输入密码 -- 查询所有数据库 ...

  10. java 获取文件MD5值

    private final char[] hexCode = "0123456789ABCDEF".toCharArray(); public String toHexString ...