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通过存储过程上传list保存功能
May 12 Oracle
Oracle11g R2 安装教程完整版
Jun 04 Oracle
Oracle创建只读账号的详细步骤
Jun 07 Oracle
快速学习Oracle触发器和游标
Jun 30 Oracle
C#连接ORACLE出现乱码问题的解决方法
Oct 05 Oracle
详解Oracle块修改跟踪功能
Nov 07 Oracle
详解Oracle数据库中自带的所有表结构(sql代码)
Nov 20 Oracle
Oracle用户管理及赋权
Apr 24 Oracle
oracle数据库去除重复数据
May 20 Oracle
Oracle锁表解决方法的详细记录
Jun 05 Oracle
ORACLE中dbms_output.put_line输出问题的解决过程
Jun 28 Oracle
Oracle中日期的使用方法实例
Jul 07 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
域名查询代码公布
2006/10/09 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
php实现Session存储到Redis
2015/11/11 PHP
php利用header函数下载各种文件
2016/08/24 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
javascript中定义类的方法汇总
2014/12/28 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
python实现装饰器、描述符
2018/02/28 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python 解压pkl文件的方法
2018/10/25 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
Python实现把类当做字典来访问
2019/12/16 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
职业生涯规划怎么写
2013/12/29 职场文书
学术会议欢迎词
2014/01/09 职场文书
教师申诉制度
2014/01/29 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android
ipad隐藏软件app图标方法
2022/04/19 数码科技