前言

进入了日期章了。

年月日加减法

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

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 异常处理(2) : 异常处理的方式二:throws + 异常类型

    1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 impor ...

  2. Linux cp命令直接覆盖不提示的方法

    今天在做项目的时候需要在linux上拷贝A项目中upload目录下所有的资源到B项目中的uoload目录下,所以我就打算使用[cp]命令拷贝过去,拷贝的时候我加了[-f]参数了,但还是一个个的询问我是 ...

  3. java学习 javaz-001 Helloworld 第一个demo

    java学习 javaz-001 Helloworld 第一个demo 目录 学习目标 前期准备 java sdk 1.8环境 编辑器IDE的选择 代码开发 目录结构 创建第一个java文件 创建第2 ...

  4. 虚拟机 centos web nodejs服务 外网映射

    虚拟机 centos web nodejs服务 外网映射 起因 为了不买云服务器也是拼了 1. 安装虚拟机 VMware-Workstation-Lite-15.5.1-15018445精简官方中文安 ...

  5. Win10使用Dism++离线安装.Net3.5

    .Net3.5的安装包在Win10已经不能使用了,在线安装.Net3.5会很卡(跟网络无关),最好是使用Dism++提取Win10系统镜像文件离线安装. 打开Dism++软件,按照如下步骤操作: 选择 ...

  6. linux 系统目录详解

    tmpfs 的优势: 1,动态文件系统的大小. 2,tmpfs 的另一个主要的好处是它闪电般的速度.因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的. 3,tmpfs 数 ...

  7. Kotlin 集合对象的单条件和多条件排序

    原文: Kotlin 集合对象的单条件和多条件排序 - Stars-One的杂货小窝 本文不是太难的东西,因为sortedWith之前没怎么用过,所以就记录下 平常开发经常使用到List,Map等数据 ...

  8. 不使用microlib实现STM32串口printf重定向:

    不使用microlib实现STM32串口printf重定向: 突然发现有一篇markdown忘记上传了,补一下 注:使用的是CubeMX生成的工程文件 生成后,在usart.c中添加如下代码: //u ...

  9. 实时云渲染:流式传输 VR 和 AR 内容

    想象一下无需专用的物理计算机,甚至无需实物连接,就能获得高质量的 AR/VR 体验是种什么样的体验? 过去,与 VR 交互需要专用的高端工作站,并且根据头显.壁挂式传感器和专用的物理空间.VR 中的复 ...

  10. NFNet:NF-ResNet的延伸,不用BN的4096超大batch size训练 | 21年论文

    论文认为Batch Normalization并不是网络的必要构造,反而会带来不少问题,于是开始研究Normalizer-Free网络,希望既有相当的性能也能支持大规模训练.论文提出ACG梯度裁剪方法 ...