Oracle对日期进行操作(oracle 日期操作)
sinye56 2024-10-11 17:38 2 浏览 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 所在周;
相关推荐
- Linux基础知识之修改root用户密码
-
现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...
- Linux如何修改远程访问端口
-
对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...
- 如何批量更改文件的权限
-
如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...
- CentOS「linux」学习笔记10:修改文件和目录权限
-
?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...
- Linux下更改串口的权限
-
问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...
- Linux chown命令:修改文件和目录的所有者和所属组
-
chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...
- chmod修改文件夹及子目录权限的方法
-
chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...
- Android 修改隐藏设置项权限
-
在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...
- 完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!
-
最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...
- linux改变安全性设置-改变所属关系
-
CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...
- Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod
-
#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...
- linux更改用户权限为root权限方法大全
-
背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...
- 怎么用ip命令在linux中添加路由表项?
-
在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...
- Linux配置网络
-
1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...
- Linux系列---网络配置文件
-
1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)