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 相关文章推荐
使用Navicat Premium工具将oracle数据库迁移到MySQL
May 27 Oracle
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
Jun 04 Oracle
DBCA命令行搭建Oracle ADG的流程
Jun 11 Oracle
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
Jun 21 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
Oracle数据库中通用的函数实例详解
Mar 25 Oracle
排查并解决Oracle sysaux表空间异常增长
Apr 20 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
oracle数据库去除重复数据
May 20 Oracle
Oracle锁表解决方法的详细记录
Jun 05 Oracle
Oracle数据库事务的开启与结束详解
Jun 25 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
PHP Global变量定义当前页面的全局变量实现探讨
2013/06/05 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
JS实现标签页切换效果
2017/05/04 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
解决layui表格的表头不滚动的问题
2019/09/04 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
python中xrange用法分析
2015/04/15 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
Python如何省略括号方法详解
2020/03/21 Python
keras 读取多标签图像数据方式
2020/06/12 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
好听的队名和口号
2014/06/09 职场文书
学校清明节活动总结
2014/07/04 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python
Docker下安装Oracle19c
2022/04/13 Servers
Golang解析JSON对象
2022/04/30 Golang
JS实现简单的九宫格抽奖
2022/06/28 Javascript