百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle对日期进行操作(oracle 日期操作)

sinye56 2024-10-11 17:38 5 浏览 0 评论

这篇文章的主要内容是Oracle数据库中对日期的基本操作,包含了常用的日期取值函数以及处理技巧。

1.sysdate能得到的消息以及常用的日期取值公式

select born as 生日,trunc(born,'mm') as 月初 from emp

select born,

to_number(to_char(born,'hh24')) 时,

to_number(to_char(born,'mi')) 分,

to_number(to_char(born,'ss')) 秒,

to_number(to_char(born,'dd')) 日,

to_number(to_char(born,'mm')) 月,

to_number(to_char(born,'yyyy')) 年,

to_number(to_char(born,'ddd')) 年内第几天,

trunc(born,'dd')一天之始,

trunc(born,'day')周初,

trunc(born,'mm')月初,

last_day(born)月末,

add_months(trunc(born,'mm'),1)下月初,

trunc(born,'yy')年初,

to_char(born,'day')周几,

to_char(born,'month')月份,

from emp where rownum <=1

取一个月的数据:

with t as

(select to_date('1995-08-02 10:00:00','yyyy-mm-dd hh24:mi:ss') as d1,

to_date('1995-08-21 09:00:00','yyyy-mm-dd hh24:mi:ss') as d2

from dual

)

select d1,d2

from t

where d1 >= trunc(d2,'mm')

and d1 < add_months(trunc(d2,'mm'),1);

2.INTERVAL

INTERVAL类型中保存的是时间间隔信息,可以通过对应的 INTERVAL 函数得到 INTERVAL类型的数据。

select interval '2' year as "year",

interval '50' month as "month",

interval '99' day as "day",

interval '80' hour as "hour",

interval '90' minute as "minute",

interval '3.15' second as "second",

interval '2 12:30:59' DAY to second as "DAY TO SECOND",

interval '13-3' year to month as "Year to month"

from dual;

当增加一个很复杂的时间段时,如上面的"02天12小时30分59秒",通过interval实现显然更直观。

3.EXTRACT

与to_char一样,extract可以提取时间字段中的年、月、日、时、分、秒。不同的是,extract的返回值为number类型。

create table test as

select extract(year from systimestamp) as "YEAR",

extract(MONTH from systimestamp) as "MONTH",

extract(DAY from systimestamp) as "DAY",

extract(HOUR from systimestamp) as "HOUR",

extract(MINUTE from systimestamp) as "MINUTE",

extract(SECOND from systimestamp) as "SECOND"

FROM DUAL;

EXTRACT不能取date中的时、分、秒,示例如下:

select created,extract(day from created) as d

from dba_objects

where object_id = 2

select extract(hour from created) as h

from dba_objects

where object_id = 2

4.确定一年是否为闰年

若要判断一年是否为闰年,只要看二月末是哪一天就可以

select trunc(born,'y') 年初 --1995-01-01

from emp;

select add_months(trunc(born,'y'),1) 二月初 --1995-02-01

from emp;

select last_day(add_months(trunc(born,'y'),1)) 二月底 --1995-02-28

from emp;

5.周的计算

with x as

(select trunc(sysdate,'yy') + (level - 1) as 日期 from dual connect by level <= 8)

select 日期, --返回值1代表周日,2代表周一

to_char(日期,'d') as d,

to_char(日期,'day') as day,

next_day(日期,1) as 下个周日,

to_char(日期,'ww') as ww,

to_char(日期,'iw') as iw

from x;

6.确定一年内属于周内某一天的所有日期

案例:要求返回指定年份内的所有周五

方案:枚举全年信息,然后再过滤。

with x as

(select trunc(sysdate,'y') + (level - 1) dy from dual

connect by level <= add_months(trunc(sysdate,'y'),12) - trunc(sysdate,'y'))

select dy,to_char(dy,'day') as 周五 from x where to_char(dy,'d') = 6;

7.确定某月内第一个和最后一个“周内某天”的日期

select next_day(trunc(born,'mm') - 1,2) 第一个周一,

next_day(last_day(trunc(born,'mm')) - 7,2) 最后一个周一

from emp

8.创建本月日历

枚举指定月份所有的日期,并转换为对应的周信息,再按所在周做一次“行转列”即可。

with x1 as

(select to_date('2013-06-03','yyyy-mm-dd') as cur_date from dual),

x2 as

(select trunc(cur_date,'mm') as 月初,add_months(trunc(cur_date,'mm'),1) as 下月初 from x1),

x3 as

(select 月初 + (level - 1) as 日 from x2 connect by level <= (下月初 - 月初)),

x4 as

(select to_char(日,'iw') 所在周,to_char(日,'dd') 日期,to_number(to_char(日,'d')) 周几 from x3)

select max(case 周几 when 2 then 日期 end) 周一,

max(case 周几 when 3 then 日期 end) 周二,

max(case 周几 when 4 then 日期 end) 周三,

max(case 周几 when 5 then 日期 end) 周四,

max(case 周几 when 6 then 日期 end) 周五,

max(case 周几 when 7 then 日期 end) 周六,

max(case 周几 when 1 then 日期 end) 周日

from x4

group by 所在周

order by 所在周;

Oracle学习日记——高级查找

Oracle学习日记——给查询结果排序

MySQL学习系列之八——分组数据

MySQL学习系列之十五——MySQL插入数据

相关推荐

CTO偷偷传我的系统性能优化十大绝招(万字干货)

上篇引言:取与舍软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、...

提升效率!VMware虚拟机性能优化十大实用技巧

我40岁,干跨境婚恋中介的。为服务各国用户,常得弄英语、日语、俄语系统环境,VMware虚拟机帮了不少忙。用久了发现优化下性能,效率能更高。今儿就来聊聊优化技巧和同类软件。一、VMware虚拟...

低延迟场景下的性能优化实践

本文摘录自「全球C++及系统软件技术大会」ScottMeyers曾说到过,如果你不在乎性能,为什么要在C++这里,而不去隔壁的Pythonroom呢?今天我们就从“低延迟的概述”、“低延迟系...

Linux性能调优之内存负载调优的一些笔记

写在前面整理一些Linux内存调优的笔记,分享给小伙伴博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门博文内容涉及:Linux内存管理的基本理论寻找内存泄露的进程内存交换空间调优不同方式的...

优化性能套路:带你战胜这只后段程序员的拦路虎

来源|极客时间《卖桃者说》作者|池建强编辑|成敏你好,这里是卖桃者说。今天给大家推荐一篇文章,来自倪朋飞老师的专栏《Linux性能优化实战》,文章主要讲的是优化性能的套路,这几乎是每个后端程序员...

SK海力士CXL优化解决方案已成功搭载于Linux:带宽提升30%,性能提升12%以上

SK海力士宣布,已将用于优化CXL(ComputeExpressLink)存储器运行的自研软件异构存储器软件开发套件(HMSDK)中主要功能成功搭载于全球最大的开源操作系统Linux上,不但提升了...

Linux内核优化:提升系统性能的秘诀

Linux内核优化:提升系统性能的艺术在深入Linux内核优化的世界之前,让我们先来理解一下内核优化的重要性。Linux内核是操作系统的核心,负责管理系统资源和控制硬件。一个经过精心优化的内核可以显著...

Linux系统性能优化:七个实战经验

Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速...

腾讯面试:linux内存性能优化总结

【1】内存映射Linux内核给每个进程都提供了一个独立且连续的虚拟地址空间,以便进程可以方便地访问虚拟内存;虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长的处理器,地址空间的范围也不同...

Linux文件系统性能调优《参数优化详解》

由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性。然而在特定应用下,这种配置往往在I/O性能方面不能达到最优。因此,如果应用对I/O性能要求较高,除...

Nginx 性能优化(吐血总结)

一、性能优化考虑点当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨当前系统结构瓶颈了解业务模式性能与安全1、当前系统结构瓶颈首先需要...

Linux问题分析与性能优化

排查顺序整体情况:top/htop/atop命令查看进程/线程、CPU、内存使用情况,CPU使用情况;dstat2查看CPU、磁盘IO、网络IO、换页、中断、切换,系统I/O状态;vmstat2查...

大神级产品:手机装 Linux 运行 Docker 如此简单

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:灵昱Termux作为一个强大的Android终端模拟器,能够运行多种Linux环境。然而,直接在Termux上运行Docker并不可行,需要...

新手必须掌握的Linux命令

Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是...

Linux 系统常用的 30 个系统环境变量全解析

在Linux系统中,环境变量起着至关重要的作用,它们犹如隐藏在系统背后的“魔法指令”,掌控着诸多程序的运行路径、配置信息等关键要素。尤其在shell脚本编写时,巧妙运用环境变量,能让脚本如虎...

取消回复欢迎 发表评论: