Oracle实践|内置函数之日期与时间函数

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

文章目录

  • 序言
    • 背景说明
    • 示例环境
  • 1 常用日期/时间函数
  • 2 日期/时间格式化/解析类函数
    • TO_CHAR函数
    • TO_DATE函数
    • TO_TIMESTAMP函数
  • 3 日期运算类函数
    • ADD_MONTHS函数
    • LAST_DAY函数
    • NEXT_DAY函数
    • MONTHS_BETWEEN函数
  • 4 提取特定日期/时间函数
  • 5 日期函数加/减法
  • 总结

序言

背景说明

Oracle 数据库提供了丰富的内置函数,涵盖数值处理、字符串操作、日期和时间处理、逻辑判断、集合处理、数据分析、数据类型转换等多个方面。下面就随着我一起来学习下这个内置函数吧,有解释不到之处,还望批评指正。
Oracle 数据库提供了一系列强大的日期与时间函数,用于处理和操作日期和时间。在处理过程中,日期和时间是分不开的内置函数,两者结合其他函数处理日期和时间相关的查询、计算、格式化,为我们在工作、学习提供了便利。
在这里插入图片描述

示例环境

本篇示例是基于Oracle DB 19c EE (19.17.0.0.0)版本操作,所操作的环境依旧是oracle提供的在线测试环境。如果有不同之处,请指出。
在这里插入图片描述

1 常用日期/时间函数

【定义】

SYSDATE:返回服务器当前的日期和时间(是否包含时间取决于使用场景和其他函数)。这个值是由数据库服务器的系统时钟确定的,每次查询时都会实时获取。默认返回格式DD-MM-YY。

CURRENT_DATE:返回当前日期(不含时间部分)。返回格式DD-MM-YY,类似SYSDATE。

CURRENT_TIMESTAMP:返回当前日期和时间,包括时区信息。返回格式DD-MM-YY HH24:MI:SS.FF。

LOCALTIMESTAMP:返回当前日期和时间,不包括时区信息。返回格式DD-MM-YY HH24:MI:SS.FF。

【示例】
获取当前日期(没有其他函数,不做任何修饰的返回)

select 
    SYSDATE,
    TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') AS "Now",
    CURRENT_DATE,
    CURRENT_TIMESTAMP,
    LOCALTIMESTAMP
from dual;

在这里插入图片描述

例如我们在物理设计模型中没有设计这些函数,可以在代码中使用这些命令返回当前的日期/时间来作为业务的时间点或者可以作为数据的默认时间。关于格式(format models)的定义可以参考:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Format-Models.html#GUID-E118F121-A0E1-4784-A685-D35CE64B4557

2 日期/时间格式化/解析类函数

上面也讲过,对于日期函数,我们多数都是在解析中或者转换中,以符合我们的业务展示需求。下面就是日期时间函数的格式化和转换过程。

TO_CHAR函数

【定义】
● TO_CHAR(bfile|blob)
● TO_CHAR(character)
● TO_CHAR(datetime)
● TO_CHAR(number)
对于TO_CHAR函数来说,转换日期时间函数有日期时间和数字,本章节只说明针对日期时间函数,可以有的格式有

TO_CHAR(date, format_model): 将日期/时间转换为字符串(简称DT转S),转换过程中主要取决于format_model。

select 
    TO_CHAR(SYSDATE, 'yyyy-mm-dd') AS "Now1", -- 默认获取到年月日
    TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') AS "Now2", -- 默认获取到年月日 时分秒
    TO_CHAR(SYSDATE, 'month') AS "Now3", -- 格式还可以使用英文单词,例如month,返回april(不区分大小写,但是需要写对)
    TO_CHAR(SYSDATE, 'YEAR') AS "Now3" -- 格式还可以使用英文单词,例如YEAR,返回TWENTY TWENTY-FOUR(不区分大小写,但是需要写对)
from dual;

在这里插入图片描述

TO_DATE函数

TO_DATE(string, format_model): 将字符串转换为日期/时间(简称S转DT),转换过程中主要取决于format_model。

select 
    TO_DATE('2024-04-29', 'yyyy-mm-dd') AS "DT1",
    --TO_DATE('2024-04-29 08:08:08', 'yyyy-mm-dd') AS "DT2",
    TO_DATE('2024-04-29', 'yyyy-mm-dd hh24:mi:ss') AS "DT3",
    TO_DATE('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss') AS "DT4"
from dual;

在这里插入图片描述

注意⚠️

此函数时转为日期,多余的会舍弃掉。
当我们使用转换函数时,可以由小转大,例如DT3;
但是不能使用小转到,接收不了,例如DT2,此时会报错:ORA-01830: date format picture ends before converting entire input string

TO_TIMESTAMP函数

【定义格式】

TO_TIMESTAMP(string1 [, format_model] [[, nls_language]]):将字符串转换为带时区的时间戳,转换过程中主要取决于format_model。

  • string1:要转换的原始字符串,包含日期和时间信息。
  • format_model(可选):定义字符串中日期和时间元素的格式模型。如果省略,Oracle会尝试使用默认的日期格式进行解析,但这可能导致错误,特别是当字符串格式与数据库的默认格式不匹配时。
  • nls_language(可选):用于控制日期时间元素的翻译,比如月份和星期的名称。如果省略,将使用会话的当前语言设置。
    【示例】
select 
    TO_TIMESTAMP('2024-04-29', 'yyyy-mm-dd') AS "DT1",
	--TO_TIMESTAMP('2024-04-29 08:08:08', 'yyyy-mm-dd') AS "DT2",
    TO_TIMESTAMP('2024-04-29', 'yyyy-mm-dd hh24:mi:ss') AS "DT3",
    TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss') AS "DT4"
from dual;

在这里插入图片描述

注意⚠️

此函数时转为时间,不足的会补充。其中包含时区信息(TO_TIMESTAMP_TZ)的很少使用,这里不在赘述。
当我们使用转换函数时,即使我们写了日期格式,也会补充时间格式,例如DT1;
当我们使用转换函数时,使用的格式不足支撑数据则会报错,例如DT2;
当我们使用转换函数时,使用的数据值不满足格式时,会补充时间格式,例如DT3;
当我们使用转换函数时,正常情况下例如DT4;

3 日期运算类函数

这里函数在SQL计算中很常见,例如查询3个月以前的数据,查询上周的数据等等。下面就是一些常用的函数ADD_MONTHS、LAST_DAY、NEXT_DAY、MONTHS_BETWEEN

ADD_MONTHS函数

【定义】

ADD_MONTHS(date, months): 加减指定月份数。

【示例】
在当前月份加上3个月或者减去4个月后的的日期值。

select 
    SYSDATE,								-- 当前日期:2024-04-29
    ADD_MONTHS(SYSDATE, 3), -- 当前日期加上3个月后:2024-07
    ADD_MONTHS(SYSDATE, -4) -- 当前日期减去4个月后:2023-12
from dual;

在这里插入图片描述

LAST_DAY函数

常用于具体的算法,例如想要获取指定日期所在月份的最后一天。
LAST_DAY(date): 返回指定日期所在月份的最后一天。

select 
    SYSDATE,
    LAST_DAY(SYSDATE)
from dual;

在这里插入图片描述

NEXT_DAY函数

【定义】

NEXT_DAY(date, day_of_week): 返回指定日期后下一个指定星期几的日期,返回值为日期。

【示例】

select 
    SYSDATE,					 -- 今天2024-04-29,周一
    NEXT_DAY(SYSDATE, 1),		 -- 返回下一个星期天,也就是2024-05-05周日(星期日 = 1  星期一 = 2  星期二 = 3  星期三 = 4  星期四 = 5  星期五 = 6  星期六 = 7)
    NEXT_DAY(SYSDATE, 6),		 -- 返回下一个星期五,也就是2024-05-03周五(星期日 = 1  星期一 = 2  星期二 = 3  星期三 = 4  星期四 = 5  星期五 = 6  星期六 = 7)
    NEXT_DAY(SYSDATE, 'FRIDAY')  
from dual;

在这里插入图片描述

其中,day_of_week的值从星期天开始,也可以使用英文单词(FRIDAY),如下
星期日 = 1 星期一 = 2 星期二 = 3 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7

MONTHS_BETWEEN函数

个人认为这个函数使用的频率不是很高,使用比较高的场景应该是计算两个日期之间的天数,可惜没有类似功能的函数,不过还比较好,可以使用日期的加减法来计算,后续会有这块内容讲述。
【定义】

MONTHS_BETWEEN(date1, date2[, round_mode]): 计算两个日期之间的月数。

【描述】
MONTHS_BETWEEN返回日期date1和date2之间的月数。月份和月份的最后一天由参数NLS_CALENDAR定义。
如果date1晚于date2,则结果为正。
如果date1早于date2,则结果为负。
如果date1和date2是一个月中的同一天或两个月的最后几天,则结果始终为整数。否则,Oracle数据库根据31天的月份计算结果的小数部分,并考虑时间分量date1和date2的差异。

【示例】
见名识义,例如我想获取2023-11-26 到 2024-04-29 之间的月份。
在这里插入图片描述

4 提取特定日期/时间函数

提取函数同截取函数差不多,都是获取到业务需要的部分,然后进入到其他计算范畴。
【定义】

EXTRACT(component FROM datetime): 提取日期/时间的特定部分(如YEAR、MONTH、DAY等)。

【示意图】
在这里插入图片描述

【示例】
我想获取2024-04-29中的各个数据,则可以使用下面的方式

select 
    SYSDATE,					 
    EXTRACT(year FROM TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss')) "Year",
    EXTRACT(month FROM TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss')) "Month",
    EXTRACT(day FROM TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss')) "Day",
    EXTRACT(hour FROM TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss')) "Hour",
    EXTRACT(minute FROM TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss')) "Minute",
    EXTRACT(second FROM TO_TIMESTAMP('2024-04-29 01:02:03', 'yyyy-mm-dd hh:mi:ss')) "Second"
from dual;

在这里插入图片描述

5 日期函数加/减法

日期函数还可以进行加减法运算,话不多说,直接贴代码。例如我想返回当前日期加上2天后的日期,想返回当前日期减去3天后的日期。

  select 
      sysdate,  -- 当前日期
      SYSDATE,  -- 当前日期
       -- 当前日期加上2天
      sysdate+2,
       -- 当前日期加上3天
      sysdate-3
from dual;

在这里插入图片描述

总结

本篇主要学习日期和时间相关的内置函数,在我们使用过程中有任何问题都可以在站内联系我。有些内置函数可以在SELECT语句中用于处理数据,同时也可以在WHERE等语句中使用。今天了解到的函数在处理数据库中的字符串数据时非常有用,特别是当需要转换、去除、清理或格式化数据时。具体是如何使用,都要考虑使用场景以及性能方面的问题,后续会再出一些相关的博文。


[引用参考]

  1. https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Functions.html#GUID-D079EFD3-C683-441F-977E-2C9503089982

欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本的基础应用

规范脚本的构成 #!/bin/bash # 注释信息 可执行的语句 执行脚本的方法 有1.添加x权限 ,绝对路经,或者相对路径2. 使用解释器 不需加x,root...bash...bash..echo 3,用source, 开机root ...bash ...echo bash -x /opt/test01.sh &#xff…

Linux防火墙(以iptables为例)

目录 Linux配置防火墙1. 引言2. 什么是防火墙3. Linux中的防火墙3.1 iptablesiptables命令参数常用方式:3.1.1 安装iptables3.1.2 配置iptables规则3.1.3 示例一:使用iptables配置防火墙规则4. iptables执行过程 Linux配置防火墙 1. 引言 在互联网时代&…

python练习题-反转一个只有三位数的整数

【问题描述】&#xff1a;反转一个只有三位数的整数 [示例]&#xff1a;123 321 完整代码如下&#xff1a; nint(input()) if n<100 or n>999: print("请输入三位数&#xff01;") else: gen%10 shin//10%10 bain//100 m100*ge10*shibai…

Function Calling学习

Function Calling第一篇 Agent&#xff1a;AI 主动提要求Function Calling&#xff1a;AI 要求执行某个函数场景举例&#xff1a;明天上班是否要带伞&#xff1f;AI反过来问你&#xff0c;明天天气怎么样&#xff1f; Function Calling 的基本流程 Function Calling 完整的官…

AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 1、百度文心…

ctfshow web入门 web306--web310源码审计

web306 这和之前的完全不一样了 <?php #error_reporting(0); session_start(); require service.php;$username$_POST[userid]; $userpwd$_POST[userpwd]; $servicenew service();$user$service->login($username,$userpwd); if($user){setcookie(user,base64_encode(…

博客系统多模块开发

创建工程 创建父工程 删除src目录&#xff0c;在pom.xml添加依赖&#xff1a; <!--统一版本 字符编码--><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.b…

gem5模拟器入门(三)——在配置脚本中添加Cache

使用gem5模拟器入门(二)——创建一个简单的配置脚本-CSDN博客配置脚本作为起点,本章将介绍一个更复杂的配置。我们将向系统添加一个缓存层次结构,如下图所示。此外,本章还将介绍如何理解gem5的统计输出,并向您的脚本添加命令行参数。 1.创建Cache对象 我们将使用经典的缓…

OFDM 802.11a的FPGA实现:发射部分的最终实现

目录 1.摘要 2.最终实现的ModelSim仿真 3.Matlab仿真和MoselSim仿真进行对比 4.完整工程 1.摘要 本系统在Xilinx的zynq 7000系列FPGA芯片上实现了一个基于IEEE 802.11a协议的OFDM基带处理发射机的功能。本系统包含了整个发射机的所有功能&#xff0c;包括序列训练符号、Si…

【debug】windows11安装WSL+Docker+本地部署cvcat

windows系统安装wsl虚拟机 首先观察是否已启用虚拟化&#xff1a; 在windows应用商店下载wsl 下载好后打开&#xff0c;创建用户名和密码&#xff0c;即可使用&#xff1a; 换源&#xff1a;ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirr…

ctfhub中的SSRF相关例题(中)

目录 上传文件 gopher协议的工作原理&#xff1a; gopher协议的使用方法&#xff1a; 相关例题: FastCGI协议 FastCGI协议知识点 相关例题&#xff1a; Redis协议 知识点&#xff1a; 相关例题 第一种方法 第二种方法 上传文件 gopher协议的工作原理&#xff1a; …

【分支控制】(switch) 详解

switch分支结构 基本语法 switch (表达式){case 常量1: //当...语句块1;break; //跳出switchcase 常量2:语句块2;break;...case 常量n;语句块n;break;default:default语句块;break;}switch 关键字, 表示switch分支表达式, 对应一个值case 常量1: 当表达式的值等于常量1, 就执行…

OrangePi AIpro初识及使用大模型GPT-Neo-1.3B测试

OrangePi AIpro介绍 1.1. 开发板简介 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭 载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB 两种版本。可以实现图像、视频等多种数据分析与推理…

package.json中peerDependencies的使用场景

文章目录 peerDependencies 的使用场景peerDependencies 的使用案例为什么使用 peerDependencies需要注意的事项主要作用 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xf…

保护“第二生命线”,科技守护颈椎健康

脊柱支撑着人体重量&#xff0c;汇集着众多血管神经&#xff0c;素有“人体第二生命线”之称。在如今快节奏的时代&#xff0c;人们生活方式也在发生着变化&#xff0c;长期低头看手机、伏案久坐等不良生活习惯引发脊柱健康问题&#xff0c;且呈现年轻化趋势。目前&#xff0c;…

基于 Wireshark 分析 TCP 协议

一、TCP 协议 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输层协议。它在网络通信中扮演着重要的角色&#xff0c;用于保证数据的可靠传输。 TCP协议的特点如下&#xff1a; 1. 面向连接&#xff1a;在通信前需要先建立连接&#x…

阿赵UE引擎C++编程学习笔记——GameMode和生命周期

大家好&#xff0c;我是阿赵。   之前在介绍HelloWorld的时候&#xff0c;我们很创建了一个MyGameModeBase的c类&#xff0c;然后就可以在BeginPlay函数里面写打印的HelloWorld。这一篇主要是说一下&#xff0c;GameMode究竟是一个什么东西&#xff0c;然后UE里面的生命周期是…

瑞_Windows环境下使用bat重启jar包等服务

文章目录 命令示例重启ray-project.jar重启redis服务 &#x1f64a; 前言&#xff1a;经验分享——Windows环境下使用.bat批处理文件重启 jar 包等服务。在学习或者工作日常中&#xff0c;有时候会需要在 Windows 系统环境下去启动 jar 包或其它服务&#xff0c;此时如果使用关…

RSC英国皇家化学学会文献查找下载

英国皇家化学学会(Royal Society of Chemistry&#xff0c;简称RSC)是以促进全球化学领域研究发展与传播为宗旨的国际权威学术机构&#xff0c;是化学信息的一个重要宣传机关和出版商。RSC出版的期刊是化学领域的核心期刊&#xff0c;大部分被SCI和MEDLINE收录&#xff0c;如An…

详解 Scala 的变量、标识符、数据类型

一、注释 Scala 注释与 Java 一致 // 单行注释/** 多行注释*//*** 文档注释*/二、变量与常量 1. 语法 // 变量&#xff0c;类型可以省略 var varName:varClass value // 常量&#xff0c;类型可以省略 val valName:valClass value2. 案例 // 使用 var/val 才会在类中声明属…