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设置DB、监听和EM开机启动的方法
Apr 25 Oracle
zabbix agent2 监控oracle数据库的方法
May 13 Oracle
Oracle 区块链表创建过程详解
May 15 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
oracle连接ODBC sqlserver数据源的详细步骤
Jul 25 Oracle
oracle重置序列从0开始递增1
Feb 28 Oracle
SQL试题 使用窗口函数选出连续3天登录的用户
Apr 24 Oracle
解决Oracle数据库用户密码过期
May 11 Oracle
Oracle锁表解决方法的详细记录
Jun 05 Oracle
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
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
谨慎使用PHP的引用原因分析
2012/09/06 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
浅谈javascript中的加减时间
2016/07/12 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
原生js实现放大镜
2017/02/20 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
GWT都有什么特性
2016/12/02 面试题
Weblogic和WebSphere不同特点
2012/05/09 面试题
文员岗位职责
2013/11/09 职场文书
班组安全员工作职责
2014/02/01 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
教师个人发展总结
2015/02/11 职场文书
高三数学教学反思
2016/02/18 职场文书
《实心球》教学反思
2016/02/23 职场文书
2019年思想汇报
2019/06/20 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
Pandas搭配lambda组合使用详解
2022/01/22 Python
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS