选读SQL经典实例笔记05_日期运算(下)

 

1. 两个日期之间相差的月份和年份

1.1. DB2

1.2. MySQL

1.3. sql

select mnth, mnth/12from (  select (year(max_hd) - year(min_hd))*12 +(month(max_hd) - month(min_hd)) as mnthfrom (select min(hiredate) as min_hd, max(hiredate) as max_hdfrom emp) x) y

1.4. Oracle

1.4.1.  sql

select months_between(max_hd,min_hd),months_between(max_hd,min_hd)/12from (select min(hiredate) min_hd, max(hiredate) max_hdfrom emp) x

1.5. PostgreSQL

1.5.1.   sql

select mnth, mnth/12from (select ( extract(year from max_hd) -extract(year from min_hd) ) * 12+( extract(month from max_hd) -extract(month from min_hd) ) as mnthfrom (select min(hiredate) as min_hd, max(hiredate) as max_hdfrom emp) x) y

1.6. SQL Server

1.6.1.   sql

select datediff(month,min_hd,max_hd),datediff(month,min_hd,max_hd)/12from (select min(hiredate) min_hd, max(hiredate) max_hdfrom emp) x

2. 两个日期之间相差的秒数、分钟数和小时数

2.1. 相差的天数分别乘以24(一天的小时数),1440(一天的分钟数)和86400(一天的秒数)

2.2. DB2

2.2.1.   sql

select dy*24 hr, dy*24*60 min, dy*24*60*60 secfrom (select ( days(max(case when ename = 'WARD'then hiredateend)) -days(max(case when ename = 'ALLEN'then hiredateend))) as dyfrom emp) x

2.3. Oracle

2.4. PostgreSQL

2.5. sql

select dy*24 as hr, dy*24*60 as min, dy*24*60*60 as secfrom (select (max(case when ename = 'WARD'then hiredateend) -max(case when ename = 'ALLEN'then hiredateend)) as dyfrom emp) x

2.6. MySQL

2.7. SQL Server

2.8. sql

select datediff(day,allen_hd,ward_hd)*24 hr,datediff(day,allen_hd,ward_hd)*24*60 min,datediff(day,allen_hd,ward_hd)*24*60*60 secfrom (select max(case when ename = 'WARD'then hiredateend) as ward_hd,max(case when ename = 'ALLEN'then hiredateend) as allen_hdfrom emp) x

3. 当前记录和下一条记录之间的日期差

3.1. DB2

3.1.1.  sql

select x.*,days(x.next_hd) - days(x.hiredate) difffrom (select e.deptno, e.ename, e.hiredate,(select min(d.hiredate) from emp dwhere d.hiredate > e.hiredate) next_hdfrom emp ewhere e.deptno = 10) x

3.2. Oracle

3.2.1.   sql

select ename, hiredate, next_hd,next_hd - hiredate difffrom (select deptno, ename, hiredate,lead(hiredate)over(order by hiredate) next_hdfrom emp)where deptno=10

3.3. PostgreSQL

3.3.1.  sql

select x.*,x.next_hd - x.hiredate as difffrom (select e.deptno, e.ename, e.hiredate,(select min(d.hiredate) from emp dwhere d.hiredate > e.hiredate) as next_hdfrom emp ewhere e.deptno = 10) x

3.4. MySQL

3.5. SQL Server

3.6. sql

select x.*,datediff(day,x.hiredate,x.next_hd) difffrom (select e.deptno, e.ename, e.hiredate,(select min(d.hiredate) from emp dwhere d.hiredate > e.hiredate) next_hdfrom emp ewhere e.deptno = 10) x

3.6.2.  datediff(x.next_hd, x.hiredate) diff

3.6.2.1. 对于MySQL 版本的DATEDIFF函数,需要省略第一个参数day,并把剩下的两个参数的顺序颠倒过来

4. 一年中有多少个星期一

4.1. 方案

4.1.1. 生成一年里所有可能的日期值

4.1.2. 格式化上述日期值,并找出它们分别是星期几

4.1.3. 统计每个“星期x”出现的次数

4.2. DB2

4.2.1.   sql

with x (start_date,end_date)as (select start_date,start_date + 1 year end_datefrom (select (current_date -dayofyear(current_date) day)+1 day as start_datefrom t1)tmpunion allselect start_date + 1 day, end_datefrom xwhere start_date + 1 day < end_date)select dayname(start_date),count(*)from xgroup by dayname(start_date)

4.3. Oracle

4.3.1.  sql

with x as (select level lvlfrom dualconnect by level <= (add_months(trunc(sysdate,'y'),12)-trunc(sysdate,'y')))select to_char(trunc(sysdate,'y')+lvl-1,'DAY'), count(*)from xgroup by to_char(trunc(sysdate,'y')+lvl-1,'DAY')

4.3.2.  sql

select to_char(trunc(sysdate,'y')+rownum-1,'DAY'),count(*)from t500where rownum <= (add_months(trunc(sysdate,'y'),12)- trunc(sysdate,'y'))group by to_char(trunc(sysdate,'y')+rownum-1,'DAY')

4.3.2.1. Oracle早期版本

4.4. PostgreSQL

4.4.1.   sql

select to_char(cast(date_trunc('year',current_date)as date) + gs.id-1,'DAY'),count(*)from generate_series(1,366) gs(id)where gs.id <= (cast( date_trunc('year',current_date) +interval '12 month' as date) -cast(date_trunc('year',current_date)as date))group by to_char(cast(date_trunc('year',current_date)as date) + gs.id-1,'DAY')

4.5. MySQL

4.5.1.   sql

select date_format(date_add(cast(concat(year(current_date),'-01-01')as date),interval t500.id-1 day),'%W') day,count(*)from t500where t500.id <= datediff(cast(concat(year(current_date)+1,'-01-01')as date),cast(concat(year(current_date),'-01-01')as date))group by date_format(date_add(cast(concat(year(current_date),'-01-01')as date),interval t500.id-1 day),'%W')

4.6. SQL Server

4.6.1.   sql

with x (start_date,end_date)as (select start_date,dateadd(year,1,start_date) end_datefrom (select cast(cast(year(getdate()) as varchar) + '-01-01'as datetime) start_datefrom t1) tmpunion allselect dateadd(day,1,start_date), end_datefrom xwhere dateadd(day,1,start_date) < end_date)select datename(dw,start_date),count(*)from xgroup by datename(dw,start_date)OPTION (MAXRECURSION 366)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/18389.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ModaHub魔搭社区:向量数据库Zilliz Cloud的AUTOINDEX教程

目录 创建索引和向量搜索 总结 为满足用户不同需求,Zilliz Cloud 提供 3 种类型的集群 CU——性能型、容量型和经济型。但是,为不同类型 CU 集群中的 Collection 创建索引时,通常需要根据所选择的 CU 类型调整索引参数。为了方便您创建索引,免去调节参数的麻烦,Zilliz C…

stm32 使用CubeIDE 移植RTX5

STM32 使用st的官方开发环境 cubeide (eclipse gcc)移植 cmsis rtos2 RTX5 实时操作系统 这套环境的主要优势是免费。cubeide免费使用。RTX5 免商业版税(已从原keil中剥离出来,现在完全开源免费)。 一,环…

偏振光的斯托克斯矢量表示法

《光纤偏振模色散原理 测量与自适应补充技术》张晓光 第二章

深入理解Linux网络——内核是如何发送网络包的

文章目录 一、相关实际问题二、网络包发送过程总览三、网卡启动准备四、数据从用户进程到网卡的详细过程1)系统调用实现2)传输层处理1. 传输层拷贝2. 传输层发送 3)网络层发送处理4)邻居子系统5)网络设备子系统6&#…

智能机器人嵌入ChatGPT会给社会带来哪些进步

智能机器人技术在当今世界中扮演着越来越重要的角色,而其中一个令人印象深刻的例子就是ChatGPT。ChatGPT是一种基于人工智能的对话系统,它利用强大的自然语言处理和生成模型,可以与人类进行自然而流畅的对话。ChatGPT内置了智能机器人技术&am…

92.qt qml-日期/日期时间/时间选择器(日历选择器)

截图如下所示: 效果图如下所示: 1.前言 QML日历组件我们之前移植过: 67.qt quick-qml自定义日历组件(支持竖屏和横屏)_qml日历_诺谦的博客-CSDN博客 但是该组件内部代码比较坑的就是全部使用自定义对象,导致性能不行,动画卡顿,并且不好加时间选择,所以本章我们重新学…

跨域问题怎么解决跨域问题

在前端领域中,跨域是指浏览器允许向服务器发送跨域请求,从而克服Ajax只能同源使用的限制。 同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,…

Maven工程分模块开发讲解及入门案例

1.分模块开发的意义 一个模块只做自己对应的功能,提升开发效率,将一个工程拆分成若干个子模块方便之间相互调用,接口共享,降低耦合度提高代码复用率。 2.分模块开发入门案例 下面将domain这个模块从当前模块当中给拆分出来。 …

Sui 8192:如何使用Sui对象撼动游戏领域

Ethos通过其Sui 8192游戏不仅展示了对象在Sui上的力量,还展示了基于对象的游戏如何有力地撼动游戏行业。每个玩家在移动游戏中的方块时都会铸造一个新的对象,类似于铸造NFT,这为每个独立玩过的游戏提供了永久上链的机会。 Sui 8192游戏的规则…

HashMap学习总结

1. JDK 1.8 主要进行了哪些优化? 1)底层数据结构从“数组链表”改成“数组链表红黑树”,主要是优化了 hash 冲突较严重时,链表过长的查找性能:O(n) -> O(logn)。 2)计算 table 初始容量的方式发生了改…

【七天入门数据库】第一天 MySQL的安装部署

系列文章传送门: 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 MySQL数据库存在多种版本,不同的版本在不同的平台上(OS,也就是操作系统上&a…

python爬虫之playWright解密传参

参考文章: Python和js实现逆向之加密参数破解_js btoa python_biyezuopinvip的博客-CSDN博客 JS逆向——借助playwright实现逆向_lishuangbo0123的博客-CSDN博客 简单方便的 JavaScript 逆向辅助模拟方法_token 自己整理的代码 from playwright.sync_api impor…