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

Oracle数据库 SQL语句 对日期的处理

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

如果感觉不错的话,欢迎各位点赞、评论、转发加收藏哦!提出你的意见以及建议,以便小便及时更正!

各位看官,如果有看不明白的,希望关注我的头条号《菜鸟学习笔记》,里面有详细的说明哦。

如果要想处理任何日期,那么都有一个基本前提,必须知道当前的日期是什么。如果想要取得当前的日期时间,在Oracle里面专门提供了一个伪列“SYSDATE”(SYSTIMESTAMP).

范例:验证伪列

SELECT SYSDATE FROM dual;

SELECT SYSTIMESTAMP FROM dual;

范例:进一步观察伪列

SELECT ename,job,sal,SYSDATE FROM emp;

SYSDATE伪里面包含有日期时间的内容,只不过现在只显示了日期数据。如果清楚了当前日期时间的取得之后还需要清楚三个日期的操作公式:

日期 + 数字 = 日期(表示若干天之后的日期);

日期 - 数字 = 日期(表示若干天之前的日期);

日期 - 日期 = 数字(天数)

范例:实现日期的基本操作

SELECT SYSDATE-7,SYSDATE+240 FROM dual;

对于日期而言,由于每个月的天数是不同的,所以直接进行天数加法实现月数的计算是不准确的。

范例:要求查询出每个雇员的编号、姓名、职位、已经被雇佣的天数

SELECT empno,ename,job,SYSDATE-hiredate FROM emp;

如果直接使用天数来实现年或月的计算,那么最终结果一定是不准确的。

为了准确的进行日期操作,在Oracle里面提供有四个日期处理函数。

范例:在当前时间下增加指定的月份

SELECT ADD_MONTHS(SYSDATE,4) FROM dual;

在进行月数增加的时候是不会限制数据的大小的(只要不要太大都行)。

范例:计算所有雇员到今天为止雇佣的月数

SELECT ename,MONTHS_BETWEEN(SYSDATE,hiredate) FROM emp;

范例:计算当前时间所在月的最后一天日期

SELECT LAST_DAY(SYSDATE) FROM dual;

范例:要求查询出所有雇员在雇佣所在月倒数第三天雇佣的雇员信息

如果想要知道某一个日期前的若干天使用“日期 - 数字”取得。

WHERE 里面需要判断条件:雇佣的日期(hiredate) = 所在月最后一天的日期(LAST_DAY(hiredate)) - 2;

查询所有的雇员编号、姓名、雇佣日期、雇佣所在月的最后一天

SELECT empno,ename,hiredate,LAST_DAY(hiredate)

FROM emp

WHERE hiredate=LAST_DAY(hiredate)-2;

一般而言,日期函数的操作过程是有些麻烦的,但是有一个前提:利用日期函数操作是最准确的。

范例:验证 NEXT_DAY()

SELECT NEXT_DAY(SYSDATE,'星期二') FROM dual;

范例:要求以年、月、日的方式计算出每个雇员到现在为止雇佣年限

例如:7698 的雇员 BLAKE 雇佣的日期为 01-5月 -81,现在的日期为2016年12月7号,此雇员到现在为止已经雇佣了:35 年 7 月 6 天。本次的要求是很精确的,那么精确的日期只能够利用日期函数来进行数据处理。

第一步:求出每一位雇员到现在为止雇佣的年份

在整个Oracle里面提供了两种方式来计算年份:

方式一:(日期 - 日期 = 天数)/365=年;但是无法去除闰年的的问题。

方式二:MONTHS_BETWEEN(SYSDATE,hiredate)/12;

SELECT empno,ename,hiredate,

TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR

FROM emp;

第二步:求出雇佣的月份

TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)-(TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12)*12))

TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12) )

第一种:

SELECT empno,ename,hiredate,

TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR,

TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)-(TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12)*12)) mouth

FROM emp;

第二种:

SELECT empno,ename,hiredate,

TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR,

TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12) ) months

FROM emp;

第三部:求出雇佣的天数

在Oracle之中提供的计算天数的操作只有一种形式“日期1 - 日期2 = 天数”

日期1:使用SYSDATE,表示当前的日期时间;

日期2:ADD_MONTHS(SYSDATE,MONTHS_BETWEEN(SYSDATE,hiredate))

回避:由于时间跨度太长了,必须回避掉年和月的问题;

SELECT empno,ename,hiredate,

TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR,

TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12) ) months,

TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) day

FROM emp;

以上是属于日期函数的一种综合应用,代码比较麻烦。

各位看官,如果有看不明白的,希望关注我的头条号《菜鸟学习笔记》,里面有详细的说明哦

相关推荐

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...

取消回复欢迎 发表评论: