这12类Oracle日期函数,全都给你总结了

news2024/11/17 23:39:07

在使用Oracle数据库过程中,对日期的使用不可避免,那Oracle中的日期函数有哪些呢?本篇就日期函数进行整理了,不一定全部了解记住,但是要做到心中有数,以后在写脚本的时候就不会绕弯子了。

1、sysdate、current_date及systimestamp

sysdate

Oracle使用计算机操作系统的当前日期和时间,是通过sysdate函数实现的,在任何可以使用Oracle函数的地方都可以使用sysdate函数,可以将它视为每个表的一个隐藏列或者伪列。也就是说即使一张表没有sysdate这个字段,也可以如下这样查询。

select sysdate from all_users;
>> 2022-10-15 23:09:37

current_date

此字段返回的是当前会话的时区的系统日期,我们一般使用的是东八区的时间,如果将当前会话时间修改成东九区试试:

alter session set time_zone='+09:00'; 
select current_date, sysdate from dual;
>> 2022-10-15 10:11:51  2022-10-15 09:11:51

通过例子就很明显看出两者区别了,一个依赖于时区,一个不依赖。

systimestamp

函数systimestamp,它返回的是本机的系统时间,精确到微秒,并包含了当前时区,它跟会话的时区无关。

select  systimestamp  from dual
>> 2022-10-15 23:15:43.699000 +08:00 

2、两个日期的差

如何计算两个日期的差呢,可以直接进行相减,返回的数值单位是天,也可以用一个日期加减某个数值代表N天后(前)。

比如十天后发工资,那么十天后是哪一天呢?

select  sysdate+10 from dual 
>> 2022-10-25 23:18:16

再比如今年春节是2023-01-22,那么距离过年还有哪个多少天呢?

select to_date('2023-01-22','yyyy-MM-dd') - sysdate from dual  
>> 98.02703703703703703703703703703703703704

晕,还有3个月呢~

3、添加月份、减少月份

既然天数可以加减,那么月份是否也可以这样操作了。其实就用到了这个函数:add_months,不管是向前或向后查,只不过是参数是正还是负而已。

例如:查询一下三个月后、两个月前分别是哪一天:

select add_months(sysdate,3), add_months(sysdate,-2)   from  dual 
>> 2023-01-15 23:23:40  2022-08-15 23:23:40

那么对于年份呢,只要在上面参数基础上乘以12就可以推算了。

4、greatest和least

这两个函数在数值函数中分别代表取一组数值中的最大值和最小值,在日期中也有相关应用。greatest是从一组日期数据中取距离当前最近的日期,least是在一组日期中选择最早的日期。

select greatest(to_date('2013-11-11','yyyy-MM-dd'),to_date('2013-12-11','yyyy-MM-dd'),to_date('2014-01-05','yyyy-MM-dd'),to_date('2013-11-11','yyyy-MM-dd')) from dual
>> 2014-01-05 00:00:00
select least(to_date('2013-11-11','yyyy-MM-dd'),to_date('2013-12-11','yyyy-MM-dd'),to_date('2014-01-05','yyyy-MM-dd'),to_date('2013-11-11','yyyy-MM-dd')) from dual
>> 2013-11-11 00:00:00

值得注意的是,这里必须用to_date对字符串进行转化,否则会把他们无法判断是否为日期格式,只能当成字符串去处理,容易出现结果错误的情况。

5、next_day

此函数表示从指定日期开始算,下周几是几号?此函数的第二个参数范围是[1,7],超出范围会报错,注意的是:1代表周日,7代表周六。

select next_day(to_date('2022-10-15','yyyy-MM-dd'),2) from dual
>> 2022-10-17 00:00:00

如上sql表示,假设今天是10月15日,下个周二是10月17日。如果参数超出范围会报错:

select next_day(to_date('2022-10-15','yyyy-MM-dd'),8) from dual  
> ORA-01846: 周中的日无效

6、last_day

此函数用来计算某个月的最后一天是哪天,有了这个函数就不要每个月都判断一下了。

select last_day(sysdate) from dual
>> 2022-10-31 23:36:12
select last_day(to_date('2022-11-15','yyyy-MM-dd')) from dual
>> 2022-11-30 00:00:00   

7、months_between

此函数用来计算两个日期之间相差的月份数,返回结果可能带小数。例如计算下自己的周岁,才发现还未成年呢~

  select floor(months_between(sysdate ,to_date('2005-08-24','yyyy-MM-dd'))/12) from dual
>> 17

8、组合日期函数

如上列举的日期函数中,根据参数格式都可以组合使用。

举例:小刚2022年10月28日入职新公司,两个月试用期,新员工过了试用期后的每月第一天可以做转正报告。那小刚什么时候可以做转正报告?

select last_day(add_months(to_date('2022-10-28','yyyy-MM-dd'),2))+1 from dual
>> 2023-01-01 00:00:00

思路:先用add_months计算俩月后是哪一天,再用last_day计算那个月的最后一天,再+1代表下个月的第一天。

9、round 和 trunc

在数值函数中,round和trunc函数是对小数的处理,那么在日期函数中,是否有相同或类似的应用呢?

我们用一个日期减去另一个日期的时候经常会带有小数,这是因为Oracle中保留了时、分、秒。有的时候我们不需要时、分、秒,所以就需要用到round和trunc这两个函数了。

round函数作用是:如果某天的时间在中午之前,那么使用round函数会将该天的时间设置为0点(就是午夜),如果为中午之后就设置为次日零点,这也就是时间方面的四舍五入了。

trunc的函数作用:舍去,无论某天处于什么时间,使用trunc函数后都会将改天时间置为当日0点。

select sysdate from dual
>> 2022-10-15 23:46:48
select to_date('2022-10-17','yyyy-MM-dd')-round(sysdate), to_date('2022-10-17','yyyy-MM-dd')-trunc(sysdate) from dual  
>> 1  2

如上,今天是10月15日 23点,因此round(sysdate)四舍五入为次日零点,即10月16日零点,因此距离17日相差1天。而trunc(sysdate)则是15日,因此相差2天。

10、使用to_date 和 to_char设置日期时间格式

基本使用

函数to_date 和 to_char作用是相反的,但是用法很类似。

to_date是将字符串转换为时间格式,而to_char是将日期转换为字符串格式。这两个函数我们平时用的实在是太多了,举例说明一下。

select to_date('2022/11/11 12:01:14','yyyy-MM-dd HH:MI:SS') from dual
>> 2022-11-11 12:01:14
select to_char(sysdate, 'yyyyMMdd HH:MI:SS') from dual
>> 20221015 11:54:17

在函数to_char使用的时候可以在format参数中插入字符串,以双引号的方式插入,至于双引号在SQL中的用法,在我的另一篇文章也有介绍。

select to_char(sysdate , 'yyyy"年"MM"月"dd"日"')  from  dual;
>> 2022年10月15日

最常见的to_char错误

在转换的时候,月份和分钟经常混淆。这里要注意下,MM代表的是月份,MI代表是分钟,由于Oracle中支持的时间很灵活,所以这块弄混了不会提示的。

select to_char(sysdate ,'yyyy-MI-dd  hh:mm:ss') from dual
>> 2022-57-15  11:10:36

如上,即使MI与MM互换了位置也不会报错的。如果分钟的数值是1-12内,那这个错就很难发现了。

to_date整形参数

函数to_date的参数不仅可以接受字符串的参数,还可以接受数值类型的参数,这样使Oracle处理时间更加的灵活。

select  to_date(20221222,'yyyy-MM-dd') from dual 
>> 2022-12-22 00:00:00

11、new_time 切换时区

先看下函数参数用法:new_time(date,‘this’,‘other’),函数共有3个参数:date代表的是this时区的时间,‘this’代表的是用三个字母组成的缩写代替,代表当前时区,‘other’也是用三个字母组成的缩写代替,表示其他时区。听起来比较模糊,举例理解一下。

查询一下‘2022-10-01 12:00:00’这个时间在北京和夏威夷的时间分别是多少?

select  to_date('2022-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),new_time(to_date('2022-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),'EST','HST') from dual
>> 2022-10-01 12:00:00  2022-10-01 07:00:00

其中,EST和HST都是全球时区的缩写,可以另行科普一下。

12、EXTRACT

函数EXTRACT可用来代替to_char函数来选择日期值中的某一部分(如从一个日期中选择月份和天)。

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;  
>> 2022 
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;   
>> 10
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;   
>> 16

注意:EXTRACT抽取年月日部分和抽取时分是不同的,抽取时分的时候需要这样写:

SELECT EXTRACT(hour FROM TIMESTAMP  '2022-12-22 22:34:12') FROM DUAL
>> 22
SELECT EXTRACT(minute FROM TIMESTAMP  '2022-12-22 22:34:12') FROM DUAL
>> 34

其实,这个函数的功能几乎可以用to_char取代,因为其功能完全可以替代,如下:

select to_char(sysdate ,'yyyy') from dual
>> 2022
select to_char(sysdate ,'HH') from dual
>> 12

综上,Oracle当中的时间函数使用非常灵活,可以变换各种格式进行查询处理。

最后: 如果你平时有很多问题想要解决,你的测试职业规划也需要一点光亮,你也想跟着大家一起分享探讨,我给你推荐一个 「软件测试学习交流群:746506216」 你缺的知识这里有,你少的技能这里有,你要的大牛也在这里……


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大话设计模型 Task05 状态、适配、单例

目录一、状态模式问题描述问题分析模式定义代码实现二、适配器模式问题描述问题分析模式定义代码实现三、单例模式问题描述问题分析模式定义代码实现一、状态模式 问题描述 假设我们要描述一名员工一天不同时间的工作状态,正常来看是比较简单的,直接从…

卡塔尔世界杯半自动越位识别技术(SAOT)的工作原理

随着卡塔尔世界杯的深入举行,半自动越位识别技术 (Semi-automated offside technology,简称为 SAOT) 这项数字技术正在被越来越多的国内外球迷所熟知。 作为 VAR(Video Assistant Referee,视频助理裁判) 的扩展,SAOT 的引入是为了…

腾讯云轻量应用服务器使用 OpenFaaS 部署云函数!

OpenFaaS 是开源的流行 FaaS(Function-as-a-Service,函数即服务)框架,OpenFaaS 让开发者聚焦业务代码的编写,无需过多关注语言框架、部署、配置等其他步骤。 轻量应用服务器 Lighthouse 为您提供了 OpenFaaS 应用镜像…

C语言程序设计--个人账簿管理系统

目的在于: 为编码人员提供依据;为修改、维护提供条件;项目负责人将按计划书的要求布置和控制开发工作全过程;项目质量保证组将按此计划书做阶段性和总结性的质量验证和确认。 本说明书的预期读者包括: 项目开发人员&…

车用DC-DC模块 1224V转5V2A过认证大塑料外壳

名称:车用12V转5V2A电源转换器 型号:LM40J5V2A3S 性质:非隔离型的BUCK电源转换器, 特点:采用集成IC设计,具有转换效率高,体积小,稳定可靠的特点,采用灌胶工艺&#xf…

Arcgis使用教程(十三)ARCGIS地图制图之地图输出参数设置详解

目录 1.加载数据 2.页面大小设置 2.1 根据页面大小设置地图 2.2 根据固定比例尺设置页面大小 1.加载数据 在Arcmap中加载中国矢量图层数据(中国省级行政区图,国界线两个图层),切换到Layout View窗口,设置地图符号要…

jvm-sandbox-repeater环境搭建

引流回放这个技术现在真的越来越成为了很多公司测试同学必备的一个工具了。当然引流回放的技术有很多,比如下来会提到的jvm-sandbox-repeater。 当然你也可以通过日志分析解析的方式去获取到请求返回的信息等。因为刚听过testerhome开发者大会,好几个主题…

不愧是阿里内部的「排序和数据结构学习笔记」面面俱到、太全了

算法——成为程序员强者的必经之路 算法到底有多重要不必多说,说「算法正在统治世界」也不为过。 在编程行业内,有句话是这么说的「薪资越高、算法越重要」,互联网头部企业花费了大量的时间和金钱,用来研究新算法,不…

Python pandas有几千个库函数,你用过几个?(6)

上一篇链接: Python pandas有好几百个库函数,你都用过吗(5)_Hann Yang的博客-CSDN博客 DataFrame 类方法(211个,其中包含18个子类、2个子模块) >>> import pandas as pd >>&g…

详解c++---string的介绍(下)

这里写目录标题前言string的Modifiersoperatorappendpush_backassigninserterasereplaceswappop_backString的operationsc_strcopyfindrfindfind_first_offind_last_offind_first_not_of和find_last_not_of前言 本片文章我们将继续介绍string的使用,点击&#xff1…

从IP V4 向IP V6 过渡(计算机网络-网络层)

目录 从IP V4 向IP V6 过渡 用双协议栈进行从 IPv4 到 IPv6 的过渡 使用隧道技术从 IPv4 到 IPv6 过渡 从IP V4 向IP V6 过渡 向 IPv6 过渡只能采用逐步演进的办法,同时,还必须使新安装的 IPv6 系统能够向后兼容 IPv6 系统必须能够接收和转发 IPv4 分…

node.js+uni计算机毕设项目基于微信小程序停车系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

node.js+uni计算机毕设项目基于微信小程序的订房系统(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等…

【12.23-12.24】Member Inference Attack

文章目录前言一、Repeated Knowledge Distillation with Confidence Masking to Mitigate Membership Inference Attacks1.1 Member Inference Attack2.2 Confidence Score Masking2.3 Knowledge Distillation二、Membership Inference Attacks Against Machine Learning Model…

垃圾收集器

1.术语 (1).吞吐量 CPU用于运行用户代码的时间与CPU总消耗的比值。 (2).全局停顿(Stop The World) 是在垃圾回收过程中,需要将JVM内存冻结的一种状态。在全局停顿状态下,除GC线程外,Java其它线程都是停止执行的,本地方法可以执行…

二叉树15:左叶子之和

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:404. 左叶子之和 题目: 给定二叉树的根节点 root ,返回所有左叶子之和。 示例&#xff1a…

支持设备的待机唤醒功能

系统待机唤醒功能 1 说明背景 1.1 需求 支持 GPU 进入低功耗模式,让用户选择降低设备的功耗 1.2 概念 上位词:APM, ACPI 同类词:睡眠模式, S0~S5 下位词:系统挂起, 系统唤醒, 运行时设备电源管理 1)ACPI 在计算机…

Rabbit MQ的基本使用

目录 1. MQ是什么,有哪些作用? 2. 主要的MQ框架有哪些? 3. RabbitMQ安装 4. RabbitMQ中的主要概念 5. 消息队列的核心概念 6. 一个简单的生产者和消费者示例。 6.1 消息发送者模块 1. MQ是什么,有哪些作用? 消…

Jenkins配合git构建持续构建流程

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 理解CI CI(Continuous Integration)翻译成持续集成,是指在源代码变更后自动检测、检出、构建、自动化测试到发布的过程。常见的开源CI工具有J…

Go类型与进制

iota:总是从0开始,递增为1的整数 一、进制 二进制0b1001000 0100 1000 八进制 0o110 01 001 000》 1 * 8^21 * 8^10 * 8^072 十六进制0x48 0100 1000 十进制转二进制 除以基数2,直到商为0为止,反向提取余数。 转为十六进制 除以基…