Oracle中日期的使用方法实例


Posted in Oracle onJuly 07, 2022

前言

在使用sql函数时,因项目数据库不同,导致sql中日期的使用方法大不相同, 一些常见的日期计算,都有不同的应用,故整理记录一下Oracle的日期用法。
以user表为例

CREATE TABLE "SCOTT"."user" 
   (	"id" NUMBER(20,0) NOT NULL ENABLE, 
	"name" VARCHAR2(30), 
	"age" NUMBER(11,0), 
	"email" VARCHAR2(50), 
	"crt_time" DATE, 
	 PRIMARY KEY ("id")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 NOCOMPRESS LOGGING
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION DEFERRED 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  TABLESPACE "USERS"



-- 添加基础数据
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('1', 'Jone', '18', '''test1@baomidou.com', TO_DATE('2022-04-01 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('2', 'Jone', '20', '''test2@baomidou.com', TO_DATE('2022-04-02 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('3', 'Jone', '28', '''test3@baomidou.com', TO_DATE('2022-04-03 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('4', 'Jone', '21', '''test4@baomidou.com', TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('5', 'Jone', '24', '''test5@baomidou.com', TO_DATE('2022-04-05 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));
INSERT INTO "SCOTT"."user"("id", "name", "age", "email", "crt_time") VALUES ('6', 'Jone', '12', '''test6@baomidou.com', TO_DATE('2022-04-06 22:20:02', 'SYYYY-MM-DD HH24:MI:SS'));

1 日期等于\大于\小于

Oracle中日期的大小比较,通常是转换成字符串来进行比较.

说明:

  • dual是oracle中定义的一个内部表,只有一行一列
  • SYSDATE函数表示当前时间
  • to_char(date,‘format’)函数, 参数date为日期类型,参数format表示转换的格式,常用的是'yyyy-mm-dd hh24:mi:ss' (大小写敏感)
-- 查看两个时间
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE 
FROM dual

-- 结果
-- 2022-04-04 22:20:02	2022-04-10 22:31:43

-- 简单案例
-- 1 时间比较 因传入时间小于当前时间  结果集为空
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE 
FROM dual
where 
TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') > SYSDATE 
-- 	空串  空串

-- 2 时间比较 因传入时间小于当前时间  结果集有值
select TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') , SYSDATE 
FROM dual
where 
TO_DATE('2022-04-04 22:20:02', 'SYYYY-MM-DD HH24:MI:SS') < SYSDATE 

-- 2022-04-04 22:20:02	2022-04-10 22:37:50

2 日期差值计算

需求: 计算两个时间的天数差

1 直接将两个时间来相减

两个日期相减,得到的是精度为时分秒的数据,不符合要求

SELECT 
	SYSDATE- to_date('2022-04-10 22:20:02','yyyy-mm-dd hh24:mi:ss')
FROM 
	dual
-- 结果 0.0181365740740740740740740740740740740741

2 时间和日期的两层转换

to_date(string,‘format’)函数,是将字符串转换为date时间.

SELECT
   to_date(to_char(SYSDATE,'yyyy-mm-dd'),'YYYY-MM-DD HH24:MI:SS') - to_date(to_char(to_date( '2022-04-10 22:20:02', 'YYYY-MM-DD HH24:MI:SS' ) ,'yyyy-mm-dd'),'YYYY-MM-DD HH24:MI:SS')
FROM
   dual;
-- 结果: 0

此种方法比较繁琐,且经过多次转换,效率较低.

3 使用trunc函数

trunc()函数.

作用: 用于截取时间或者数值,返回指定的值.

日期处理:

TRUNC(date,[format])

  • date 为必要参数,是输入的一个date日期值.
  • format参数可忽略,指定日期格式,缺省时表示指定日期的0点.
SELECT
	SYSDATE,
	to_date( '2022-04-10 22:20:02', 'YYYY-MM-DD HH24:MI:SS' ),
    trunc(SYSDATE) - trunc(to_date( '2022-04-10 22:20:02', 'YYYY-MM-DD HH24:MI:SS' ))
FROM
   dual;

此外,该函数还可以用于数值处理.

TRUNC(number,[decimals])

  • number 为必要参数,是输入的一个number数值.
  • decimals 参数可忽略,指定截取的位数,缺省时表示截掉小数点后边的值
SELECT
3.0,
2.22,
    trunc(3.0) - trunc(2.22,1)
FROM
    dual;
-- 结果 3    2.22    0.8

总结

到此这篇关于Oracle中日期使用的文章就介绍到这了,更多相关Oracle日期使用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Oracle 相关文章推荐
oracle表分区的概念及操作
Apr 24 Oracle
使用Oracle跟踪文件的问题详解
Jun 28 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
oracle索引总结
Sep 25 Oracle
Oracle 临时表空间SQL语句的实现
Sep 25 Oracle
oracle删除超过N天数据脚本的方法
Feb 28 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
详解SQL的窗口函数
Apr 21 Oracle
instantclient客户端 连接oracle数据库
Apr 26 Oracle
在Oracle表中进行关键词搜索的过程
Jun 10 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
Jun 28 Oracle
Oracle删除归档日志及添加定时任务
Jun 28 Oracle
oracle设置密码复杂度及设置超时退出的功能
Jun 28 #Oracle
Oracle删除归档日志及添加定时任务
Jun 28 #Oracle
oracle delete误删除表数据后如何恢复
Jun 28 #Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 #Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
Jun 28 #Oracle
Oracle数据库事务的开启与结束详解
Jun 25 #Oracle
在Oracle表中进行关键词搜索的过程
Jun 10 #Oracle
You might like
上海无线电三厂简史修改版
2021/03/01 无线电
PHP下打开URL地址的几种方法小结
2010/05/16 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
PHP投票系统防刷票判断流程分析
2012/02/04 PHP
如何使用Strace调试工具
2013/06/03 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
工程部主管岗位职责
2013/11/17 职场文书
优秀毕业生求职信
2014/06/05 职场文书
师范生见习自我总结
2015/06/23 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书