Oracle 日期时间函数大全

article/2025/9/26 21:56:35

前言 设置日期语言

 alter session set NLS_DATE_LANGUAGE='AMERICAN';alter session set NLS_DATE_LANGUAGE='SIMPLIFIED CHINESE';
--也可以这样写:to_date('2021-06-30 15:23:45','yyyy-mm-dd hh24:mi:ss',NLS_DATE_LANGUAGE='AMERICAN' ) 

可通过如下语句查看:

 select * from nls_session_parameters      select * from V$NLS_PARAMETERS  

一、日期格式

以 2021-06-30 15:36:23 为例 

格式类型名称示例
年(Year)yytwo digits两位年显示21
yyythree digits三位年显示021
yyyyfour digits四位年显示2021
月(Month)mmnumber两位月显示06
monabbreviated字符集表示显示6月(若是英文版,显示Jun)
monthspelled out字符集表示显示6月(若是英文版,显示June)
日(Day)ddnumber当月第几天显示30
dddnumber当年第几天显示181
dyabbreviated当周第几天缩写显示星期三,若是英文版显示Wed
dayspelled out当周第几天全写显示星期三,若是英语显示wednesday
dnumber当周第几天,返回数字显示4, 每周第1天是星期天
ddspthspelled out当月第几天(英文显示)显示thirtieth
Hour(时)hhtwo digits12小时制显示03
hh24two digits 24小时制显示15
Minute(分)mitwo digits60进制显示36
Second(秒)sstwo digits60进制显示23
Quarter(季度)Qdigit季度显示2
当年第几周WWdigit当年第几周(从年的第一天算7天为一周)显示26
IWdigit年的自然周显示26
当月第几周Wdigit当月第几周显示5

注意:

1. WW 是从年的第一天算7天为一周,IW是自然周算的,可以看如下代码:

select to_char(to_date('2020-01-06','yyyy-mm-dd'),'IW')  from dual   --02select to_char(to_date('2020-01-06','yyyy-mm-dd'),'WW')  from dual  --01 

       24小时格式下时间范围为: 0:00:00 - 23:59:59....      
        12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 

2. 一周内的第几天:‘D’ 没星期的第1天是‘星期日’ 

二、日期类型和字符类型转换函数 to_date,to_char 

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;   //日期转化为字符串   
select to_char(sysdate,'yyyy') as nowYear   from dual;   //获取时间的年   
select to_char(sysdate,'mm')    as nowMonth from dual;   //获取时间的月   
select to_char(sysdate,'dd')    as nowDay    from dual;   //获取时间的日   
select to_char(sysdate,'hh24') as nowHour   from dual;   //获取时间的时   
select to_char(sysdate,'mi')    as nowMinute from dual;   //获取时间的分   
select to_char(sysdate,'ss')    as nowSecond from dual;   //获取时间的秒

但是呢,to_date就要求转换的格式要和输入的字符型日期要对应,不然会报错,如下:

这个呢是因为少了时分秒了。

 时间为null的用法 to_date(null) 

NEXT_DAY(X,Y):用于计算X时间后第一个星期Y的时间。Y是一个字符串,表示用当前会话语言表示的一周中某一天的全称(如星期一、星期二等),也可以是数值。

TRUNC(X [,FORMAT]):截断日期,返回的是日期, FORMAT 中与周相关的有D,IW,WW,W,FMWW

--取周的开始时间和结束时间
SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') AS STARTDATE FROM DUAL;--本周周一
SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') + 6 AS ENDDATE FROM DUAL;--本周周日SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') - 7 AS STARTDATE FROM DUAL;---上周周一   
SELECT TRUNC(TO_DATE('2021-06-30','YYYY-MM-DD'),'IW') - 1  AS ENDDATE FROM DUAL;--上周周日

EXTRACT():从一个date或者interval类型中截取到特定的部分,

extract (    { year | month | day | hour | minute | second }    | { timezone_hour | timezone_minute }    | { timezone_region | timezone_abbr }    from { date_value | interval_value } )

oracle中extract()函数----用于截取年、月、日、时、分、秒 - 小强斋太 - 博客园 (cnblogs.com)

select  extract (year from sysdate) year, extract (month from sysdate) month, extract (day from sysdate) day from  dual; select extract (year from date '2015-05-04') year, extract (month from date'2015-05-04') month, extract (day from date '2011-05-04') day from dual;

 从timestamp中获取年月日时分秒

select extract(year from systimestamp) year
,extract(month from systimestamp) month
,extract(day from systimestamp) day
,extract(minute from systimestamp) minute
,extract(second from systimestamp) second
,extract(timezone_hour from systimestamp) th
,extract(timezone_minute from systimestamp) tm
,extract(timezone_region from systimestamp) tr
,extract(timezone_abbr from systimestamp) ta
from dual

 

三、时间差

 3.1 年份差(相差月数/12)

select ((months_between(TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2016-5-31','yyyy-mm-dd hh24:mi:ss')))/12)
As 相差年份 from dual;
--结果:2 
select trunc(months_between(sysdate, to_date('2017-01-01','yyyy-mm-dd')) / 12) from dual;
--结果:4
SELECT EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM TO_DATE('2017-01-01','YYYY-MM-DD')) YEARS FROM DUAL;
--结果:4 

3.2 月数差(months_between()函数)

--oracle两个日期的相差月数--
--1)月份都是最后一天,A日期 > B日期 ,返回整数 ---
select months_between(TO_DATE('2018-6-30','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
As 相差月份1 from dual;  --返结果:1--2)月份都是最后一天,B日期 > A日期 ,返回负数 ---
select months_between(TO_DATE('2018-4-30','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
As 相差月份2 from dual;  --f返回结果:-1--3)月份天数不一样,A日期 > B日期 ,返回带小数的数字---
select months_between(TO_DATE('2018-6-25','yyyy-mm-dd hh24:mi:ss'),TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
As 相差月份3 from dual;  --返回结果:0.8064516...

3.3 相差天数(两个日期相减,并用to_number()函数)

--Oracle中两个日期相差天数--
select TO_NUMBER(TO_DATE('2021-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))
AS 相差天数 from dual;

3.4 相差小时数,分钟数,秒数(时制进行转换)

--Oracle中两个日期相差小时数--
select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24)
AS 相差小时数 from dual;--Oracle中两个日期相差分钟数--
select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60)
AS 相差分钟数 from dual;--Oracle中两个日期相差秒数--
select TO_NUMBER((TO_DATE('2018-6-5','yyyy-mm-dd hh24:mi:ss')- TO_DATE('2018-5-31','yyyy-mm-dd hh24:mi:ss'))*24*60*60)
AS 相差秒数 from dual;

3.5 日期加法

 sysdate+1 加一天
sysdate+1/24 加1小时
sysdate+1/(24*60) 加1分钟
sysdate+1/(24*60*60) 加1秒钟
类推至毫秒0.001秒

加法 
select sysdate,add_months(sysdate,12) from dual;        --加1年 
select sysdate,add_months(sysdate,1) from dual;        --加1月 
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1星期 
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1天 
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1小时 
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1分钟 
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1秒 
减法 
select sysdate,add_months(sysdate,-12) from dual;        --减1年 
select sysdate,add_months(sysdate,-1) from dual;        --减1月 
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1星期 
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1天 
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1小时 
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1分钟 
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --减1秒
 

3.6 获取两个日期之间的时间间隔,extract()函数是最好的选择

select
extract (day from dt2 - dt1) day,
extract (hour from dt2 - dt1) hour,
extract (minute from dt2 - dt1) minute,
extract (second from dt2 - dt1) second
from
(
select
to_timestamp ('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1,
to_timestamp ('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2
from
dual
)

3.7 获取日期中最晚的一个

 select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

3.8 查找月的第一天,最后一天

     SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_MonthFROM dual;

部分内容参照  ORACLE日期时间函数大全 - 阿郎 - 博客园 (cnblogs.com)


http://chatgpt.dhexx.cn/article/PLDiFhij.shtml

相关文章

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

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

Oracle日期函数

Oracle日期类型函数是操作日期、时间类型的相关数据,返回日期时间类型或数字类型结果,常用的函数有:SYSDATE()、ADD_MONTHS()、LAST_DAY()、TRUNC()、ROUND()等等。 系统日期、时间函数 SYSDAT…

Oracle函数——日期函数

Oracle中的时间类型只有date和TIMESTAMP,TIMESTAMP是比date更精确的类型。日期时间函数用于处理时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪、年、月、日、小时、分钟、秒,并且默认日期显式格式为“DD-MON-YY”。…

回归问题的评价指标

回归问题的评价指标有很多,这里一一进行详细分类: 点对点误差 MSE均方误差 MSE(Mean Square Error): 均方误差描述了样本真实值与预测值差方求和的平均值,在机器学习中,利用均方误差最小化优化模型的方法称…

区分回归问题和分类问题

回归问题和分类问题的区别 回归问题 用一个经典的问题来解释:假设你想买房子,手头上仅有的是之前出售的房子的占地面积大小和房子的价格,你想凭借手头上的这些数据来买一套不错的房子,那么你仅有的关于房子的信息是房子的占地大小…

LSTM回归问题

LSTM 解决回归问题时,出现了 model.predict() 输出的值几乎是常数值的问题,后来发现是因为数据没有标准化(归一化),导致 loss 不下降,也就是不收敛。后来加入了数据的标准化之后,就可以拟合了。…

数据分析——随机森林解决回归问题

下表为训练数据集,特征向量只有一维,根据此数据表建立回归决策树。 在本数据集中,只有一个特征变量,最优切分变量自然是x。接下来考虑9个切分点{1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5},根据下式计算每个待切分点的损失…

处理回归问题常见的算法

7.处理回归问题常见的算法: 回归属于有监督学习的一种,其从连续的统计数据中的到数学模型,然后使用生成的模型用于预测和分类。线性回归:给定数据集,其中线性回归模型通过对数据集的学习生成一个线性模型,…

深度学习 分类问题与回归问题

分类问题与回归问题 分类与回归 一、分类问题1.1分类性能度量:(1)准确率(accuracy)*(2)精确率(percision)*(3)召回率(recall&#xff…

Python实现---用KNN解决回归问题

KNN用于回归问题 KNN不仅可以用于分类问题,也可以用回归问题。 主要算法思路就是:使用KNN计算某个数据点的预测值时,模型从训练数据集中选择离该数据点最近的k个数据点,并且把这些数据的y值取均值,把求出的这个均值作…

神经网络:DNN回归问题

2020_11_01 DNN Regression 参考资料:《Python深度学习》 Francois Choll 神经网络可以主要解决三大类问题:二分类、多分类、回归。 回归问题特点在于结果是连续值,因此调参过程也与分类问题相异。 在了解DNN回归问题后,我们…

机器学习实战(二)使用LightGBM的回归问题模型搭建

目录 1.导入所用的数据包 2.导入模型建立所需要的数据 3.数据集划分 4.导入训练包与交叉验证包(LGBM) 5.模型训练 6.模型验证及画图 7.画图展示模型验证情况 8.特征重要性分析 数据集链接 S. Thai, H. Thai, B. Uy, T. Ngo, M. Naser, Test Data…

Keras深度学习(4)-回归问题之预测房价

在深度学习的任务中,回归问题也是一个常见的任务。 本文将要预测 20 世纪 70 年代中期波士顿郊区房屋价格的中位数,已知当时郊区的一些数据点,比如犯罪率、当地房产税率等。本节用到的数据集与前面两个例子有一个有趣的区别。它包含的数据点相…

『迷你教程』绝对能看懂的分类问题和回归问题白话版

文章目录 内容介绍函数近似分类预测建模回归预测建模分类与回归在分类和回归问题之间转换 内容介绍 老生常谈的话题分类问题和回归问题之间有一个重要的区别。从根本上说,分类是关于预测标签,回归是关于预测数量。 我经常看到这样的问题: 如…

各类回归问题总结

回归问题的条件/前提: 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。 1. 线性回归 假设 特征 和 结果…

回归问题的评价指标和重要知识点总结

回归分析为许多机器学习算法提供了坚实的基础。在这篇文章中,我们将总结 10 个重要的回归问题和5个重要的回归问题的评价指标。 1、线性回归的假设是什么? 线性回归有四个假设 线性:自变量(x)和因变量(y…

深度学习3:回归问题

首先不要将回归问题和logistic回归算法混为一谈,logistic回归不是回归算法,而是分类算法。 之前的分类问题的目标是预测输入数据点所对应的单一离散的标签,而这节要预测一个连续的而不是离散的标签,比如根据气象数据预测明天的气温…

回归问题评价指标

目录 平均绝对值误差(MAE) 均方误差(MSE) 均方根误差(RMSE) 平均绝对百分比误差(MAPE) 均方误差对数(MSLE) 中位绝对误差(MedAE) R Squared 总结 回归模型: 个样本,每个样本…

stacking集成模型预测回归问题

前言 关于各种集成模型,已经有很多文章做了详细的原理介绍。本文不再赘述stacking的原理,直接通过一个案例,使用stacking集成模型预测回归问题。 本文通过学习一篇stacking继承学习预测分类问题,对其代码进行了调整,以…

逻辑回归问题汇总

文章目录 1. Logistic回归与线性回归的区别与联系?2. Logistic回归有哪些基本假设?3. Logistic回归的损失函数?4. Logistic回归损失函数的求解方法?5. Logistic回归是如何进行分类的?6. Logistic回归为什么要用极大似然函数作为损失函数?7. 为什么在…