oracle中日期格式总结
- 格式:doc
- 大小:34.50 KB
- 文档页数:16
oracle格式化⽇期--环境select *from v$version;SELECT SESSIONTIMEZONE FROM DUAL;show parameter nls;-- - / , . ; : 指定返回字串分隔符select to_char(sysdate,'yyyy/mm/dd') from dual;select to_char(sysdate,'yyyy:mm:dd') from dual;--AD/A.D. 公元标识select to_char(sysdate,'AD YYYY-MM-DD') from dual;--BC/B.C. 公元标识select to_char(sysdate,'BC YYYY-MM-DD') from dual;--CC/SCC 世纪标识,S前缀指定如遇公元前的显⽰,会在显⽰前加(-)select to_char(to_date('2014-8-3','YYYY-MM-DD'),'cc') from dual;--D 指定⽇期在周中的数值(范围:1-7)select to_char(to_date('2014-03-07','YYYY-MM-DD'),'D') from dual; --6--DAY 指定⽇期在周中的名称select to_char(to_date('2014-03-07','YYYY-MM-DD'),'DAY') from dual; --星期五--DD 指定⽇期在当⽉中的天数(范围:1-31)select to_char(to_date('2014-03-07','yyyy-mm-dd'),'DD') from dual; --07--DDD 指定⽇期在当年中的天数(范围:1-366)select to_char(to_date('2014-03-07','yyyy-mm-dd'),'DDD') from dual; --066--MON 返回指定⽇期的⽉份简写select to_char(sysdate,'MON') from dual;--MONTH 返回指定⽇期的⽉份全称select to_char(sysdate,'MONTH') from dual;--YEAR/SYEAR 返回字符型年,此处 S前缀指定如遇公元前的显⽰,会在显⽰前加(-) select to_char(sysdate,'YEAR') from dual; --TWENTY FOURTEENselect to_char(sysdate,'SYEAR') from dual;--YYYY/SYYYY 返回数字型年,此处S前缀指定如遇公元前的显⽰,会在显⽰前加(-) select to_char(sysdate,'YYYY') from dual;select to_char(sysdate,'SYYYY') from dual;--MM 返回指定⽇期的⽉份(范围:1-12)select to_char(sysdate,'MM') from dual;--HH/HH12 ⼩时(范围:1-12)select to_char(sysdate,'HH') from dual;select to_char(sysdate,'AMHH') from dual;select to_char(sysdate,'HH12') from dual;select to_char(sysdate,'AMHH12') from dual; --下午05--HH24 ⼩时(范围:0-23)select to_char(sysdate,'HH24') from dual;select to_char(sysdate,'AMHH24') from dual; --下午17--MI 返回指定时间的分钟(范围0-59)select to_char(sysdate,'MI') from dual;-- SS 返回指定时间的秒数(范围:0-59)select to_char(sysdate,'SS') from dual;--FF[1-9] 返回毫秒数,可指定长度1-9,默认6位select to_char(systimestamp,'ff') from dual;select to_char(systimestamp,'ff4') from dual;--Y,YYY 返回有逗号分隔显⽰的年select to_char(sysdate,'y,yyy') from dual;--W 返回指定⽇期在当⽉中的第X周(范围:1-5)select to_char(to_date('2007-6-18','yyyy-mm-dd'),'w') from dual;select to_char(sysdate,'W') from dual--WW 返回指定⽇期在当年中的第X周(范围:1-53)select to_char(to_date('2007-6-18','yyyy-mm-dd'),'WW') from dual;select to_char(sysdate,'WW') from dual;--RM 以罗马数字形式返回⽉份(范围I-XII)select to_char(sysdate,'RM') from dual;--Q 返回指定⽇期的季度(范围:1-4)select to_char(sysdate,'q') from dual;--数字Select TO_CHAR(1.0123) FROM DUAL ;SELECT TO_CHAR(0.123,'0.0000') FROM DUAL;--FM去除空格Select TO_CHAR(10.12,'FM099.999') FROM DUAL ; --FM 去除空格Select TO_CHAR(10.12,'FM999.999') FROM DUAL ;Select TO_CHAR(123.0233,'FM9999999.0099') FROM DUAL;select to_char(389999.00,'9,999,999') from dual;--$ 字符前附加$符select to_char(18,'$999') from dual;select to_char(18,'999$') from dual;--0 字符头部或尾部附加0select to_char(18.0,'0999') from dual;select to_char(18.0,'9990.0000') from dual;--9 与上类似以指定长度返回数值格式,不过如果被格式化的数值长度短于指定格式,则以空格补⾜。
TO_DATE格式(以时间:2007-11-02 13:45:25为例)Year:yy two digits 两位年显示值:07yyy three digits 三位年显示值:007yyyy four digits 四位年显示值:2007Month:mm number 两位月显示值:11mon abbreviated 字符集表示显示值:11月,若是英文版,显示novmonth spelled out 字符集表示显示值:11月,若是英文版,显示novemberDay:dd number 当月第几天显示值:02ddd number 当年第几天显示值:02dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示friday spelled out 当周第几天全写显示值:星期五,若是英文版,显示fridayddspth spelled out, ordinal twelfthHour:hh two digits 12小时进制显示值:01hh24 two digits 24小时进制显示值:13Minute:mi two digits 60进制显示值:45Second:ss two digits 60进制显示值:25其它Q digit 季度显示值:4WW digit 当年第几周显示值:44W digit 当月第几周显示值:124小时格式下时间范围为: 0:00:00 - 23:59:59....12小时格式下时间范围为: 1:00:00 - 12:59:59 ....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; //获取时间的秒select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//2.select to_char( to_date(222,'J'),'Jsp') from dual显示Two Hundred Twenty-Two3.求某天是星期几select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;星期一select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;monday设置日期语言ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4. 两个日期间的天数select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;5. 时间为null的用法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual;注意要用TO_DATE(null)6.月份差a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd') 那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
OracleSQL⽇期及⽇期格式获取命令⽇期及⽇期格式:获取⽇期:sysdate()格式化⽇期to_char(sysdate(),'yyyy-mm-dd,hh24:mi:ss')to_date(sysdate(),'yyyy-mm-dd,hh24:mi:ss')注:to_char 把⽇期或数字转换为字符串to_char(number, '格式')to_char(salary, '$99,999.99')to_char(date, '格式')to_date 把字符串转换为中的⽇期类型to_date(char, '格式')转换格式:表⽰ year 的:y 表⽰年的最后⼀位yy 表⽰年的最后2位yyy 表⽰年的最后3位yyyy ⽤4位数表⽰年表⽰ month 的:mm ⽤2位数字表⽰⽉mon ⽤简写形式,⽐如11⽉或者novmonth ⽤全称,⽐如11⽉或者november表⽰ day 的:dd 表⽰当⽉第⼏天ddd 表⽰当年第⼏天dy 当周第⼏天,简写,⽐如星期五或者friday 当周第⼏天,全称,⽐如星期五或者friday表⽰ hour 的:hh 2位数表⽰⼩时 12进制hh24 2位数表⽰⼩时 24⼩时表⽰minute的:mi 2位数表⽰分钟表⽰second的:ss 2位数表⽰秒 60进制表⽰季度的:q ⼀位数表⽰季度(1-4)另外还有ww ⽤来表⽰当年第⼏周 w⽤来表⽰当⽉第⼏周。
24⼩时制下的时间范围:00:00:00-23:59:5912⼩时制下的时间范围:1:00:00-12:59:59例⼦:返回系统⽇期: 2018/1/19 22:44:54select sysdate from dual;格式化: 2018-01-19 22:46:59select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual获取昨天:2018/1/18select trunc(sysdate-1) from dual;获取上个⽉第⼀天:2017/12/1select add_months(trunc(sysdate,'MON'),-1) from dualselect add_months(trunc(sysdate,'MON'),-13) from dual获得本季度第⼀天:2018/1/1select trunc(add_months(sysdate,0),'Q') from dual获得上季度第⼀天:2017/10/1select trunc(add_months(sysdate,-3),'Q') from dual补充当前时间减去7分钟的时间select sysdate,sysdate - interval '7' MINUTE from dual;当前时间减去7⼩时的时间select sysdate - interval '7' hour from dual;当前时间减去7天的时间select sysdate - interval '7'day from dual;当前时间减去7⽉的时间select sysdate,sysdate - interval '7'month from dual;当前时间减去7年的时间select sysdate,sysdate - interval '7'year from dual;时间间隔乘以⼀个数字select sysdate,sysdate -8*interval '7' hour from dual;Oracle 常⽤的时间函数Sysdate :当前⽇期和时间SQL>Select sysdate from dual;2018/1/1923:15:20Last_day :本⽉最后⼀天SQL>Select last_day(sysdate) from dual;2018/1/3123:16:24Add_months(d,n) :当前⽇期d后推n个⽉,⽤于从⼀个⽇期值增加或减少⼀些⽉份SQL>Select add_months(sysdate,2) from dual;2018/3/1923:18:29Months_between(f,s) :⽇期f和s间相差⽉数SQL>select months_between(sysdate,to_date('2017-8-1','yyyy-mm-dd'))from dual;5.6120034348865NEXTDAY(d, dayofweek) :返回由"dayofweek"命名的,在变量"d"指定的⽇期之后的第⼀个⼯作⽇的⽇期。
Oracle年月日时分秒的格式一、概述在数据库系统中,日期和时间的处理是非常重要的一个方面。
Oracle数据库提供了丰富的日期和时间函数,可以满足不同的需求。
其中,日期和时间的格式化是其中的关键操作之一。
在Oracle中,我们可以使用不同的格式来表示年月日时分秒。
本文将详细介绍Oracle中年月日时分秒的格式化方法。
二、日期和时间的数据类型在Oracle数据库中,日期和时间被定义为特殊的数据类型。
主要的数据类型有DATE、TIMESTAMP和TIMESTAMP WITH TIME ZONE等。
这些数据类型可以存储年月日时分秒的信息。
2.1 DATE数据类型DATE数据类型是Oracle中最常用的日期和时间数据类型。
它可以存储从公元前4712年到公元9999年的日期和时间。
DATE数据类型的格式默认为”YYYY-MM-DD HH24:MI:SS”,其中YYYY表示年份,MM表示月份,DD表示日期,HH24表示小时(24小时制),MI表示分钟,SS表示秒钟。
2.2 TIMESTAMP数据类型TIMESTAMP数据类型是Oracle中用于存储日期和时间信息的另一种数据类型。
它可以存储更精确的时间信息,包括毫秒级别的精度。
TIMESTAMP数据类型的格式也是”YYYY-MM-DD HH24:MI:SS.FF”,其中FF表示毫秒。
2.3 TIMESTAMP WITH TIME ZONE数据类型TIMESTAMP WITH TIME ZONE数据类型是一种带有时区信息的日期和时间数据类型。
它可以存储时区偏移量,以便在不同的时区中正确地显示日期和时间。
TIMESTAMP WITH TIME ZONE数据类型的格式与TIMESTAMP数据类型相同。
三、日期和时间的格式化在Oracle数据库中,可以使用不同的函数来格式化日期和时间。
常用的函数有TO_CHAR、TO_DATE和TO_TIMESTAMP等。
3.1 TO_CHAR函数TO_CHAR函数用于将日期和时间数据类型转换为指定的字符串格式。
oracle年月格式
在Oracle数据库中,有几种常见的日期和时间格式,可以用来表示年月。
以下是其中一些常用的格式:
1. YYYY-MM: 这是ISO标准的年月格式,其中YYYY表示四位数的年份,MM表示两位数的月份。
例如,2022年1月可以表示为"2022-01"。
2. YYYYMM: 这是一种紧凑的年月格式,其中YYYY表示四位数的年份,MM表示两位数的月份。
例如,2022年1月可以表示为"202201"。
3. MM/YYYY: 这是一种常见的月年格式,其中MM表示两位数的月份,YYYY表示四位数的年份。
例如,1月2022年可以表示为"01/2022"。
4. MON-YYYY: 这是一种缩写的月年格式,其中MON表示月份的缩写,YYYY表示四位数的年份。
例如,1月2022年可以表示为"JAN-2022"。
5. MONTH YYYY: 这是一种完整的月年格式,其中MONTH表示月份的全名,YYYY表示四位数的年份。
例如,1月2022年可以表示为"January 2022"。
需要注意的是,Oracle数据库中的日期和时间格式可以通过使用TO_CHAR函数将日期类型的数据转换为字符串来实现。
例如,可以使用以下语句将日期字段转换为指定的年月格式:
sql.
SELECT TO_CHAR(date_column, 'YYYY-MM') FROM table_name;
以上是一些常见的Oracle年月格式,你可以根据具体需求选择适合的格式进行使用。
①Oracle中的日期时间存储:oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关。
不存贮秒以下的时间单位。
②Oracle中的日期时间显示:通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。
一般显示年月日,而不显示时分秒。
③Oracle中的日期时间插入:向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。
④Oracle中的日期时间格式修改:a.SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';b.册表\hkey_local_machine\software\oracle\home0主键中增加一个字串(8i版本),字串名为nls_date_format,字串的值为你希望定义的时间格式前者只对当前会话有效,也即是一旦你关闭了SQL*PLUS窗口或重新打开一个SQL*PLUS窗口,日期时间格式依然采用本地字符集对应的日期时间格式。
后者对所有客户端应用有效。
当两者同时应用时,以alter session的修改为准。
一、Oracle的日期函数:Oracle从8i开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、截取等功能。
下面是Oracle提供的日期函数一览表二、日期加减:在Oralce中,对日期进行加减操作的默认单位是天,也就是说如果我们向当前日期加1的话是加上一天,而不是一秒或一小时。
那么对一天中的一段时间进行加减要怎么做呢?很简单!只需将它们转化为以天为单位即可。
【1】为当前时间加上30分钟:SQL>select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') now_date,2 to_char(sysdate+(30/24/60), 'yyyy-mm-dd hh:mi:ss') new_date3from dual;NOW_DATE NEW_DATE-------------------------------------- --------------------------------------2008-06-3010:47:312008-06-3011:17:31SQL>我们看到了在绿色高亮处使用30/24/60将分钟转换成天。
Oracle批量删除表、索引等对象、批量恢复Drop操作删除的表、索引等对象虽然能够恢复表结构和数据,但是索引,主键,约束等,并不能完全恢复。
/**********************************************************************查询Drop操作删除的对象select * from recyclebin ;单个对象(表、索引或是通过drop操作删除的其它对象)恢复flashback table(被删除的对象类型)被删除的对象名称to before drop***********************************************************************/--Demo单张表恢复flashback table Table_XXX to before drop;-- 创建批量恢复表的存储过程create or replace procedure RecoveryOfTable isbegindeclare/*********************************************************************** select 'flashback table '||a.original_name||' to before drop' fromrecyclebin a where a.operation = 'DROP' and a.type='TABLE'恢复其它类型对象请将flashback table 这里换为其它类型,type='相应的类型'可加更多条件限制,具体查询recyclebin***********************************************************************/ cursor cur_flashback is select 'flashback table '||a.original_name||' to before drop' from recyclebin a where a.operation = 'DROP' and a.type='TABLE';v_name varchar2(4000);beginopen cur_flashback;fetch cur_flashback into v_name;while cur_flashback%foundloopexecute immediate v_name;fetch cur_flashback into v_name;end loop;dbms_output.put_line('恢复成功!');close cur_flashback;end;end;--执行存储过程(使用plsql操作时)beginRecoveryOfTable;end;--执行存储过程(使用SQL调用)execute RecoveryOfTable;/**************************************批量删除数据库表select * from user_tables where table_name like 'Table_XXX%';存储过程体**************************************/declarecursor cur_delete is select 'drop table '|| table_name from user_tables where table_name like 'Table_XXX%';/*************************************可模板条件删除其它类型对象如:索引等**************************************/v_name varchar2(4000);beginopen cur_delete;fetch cur_delete into v_name;while cur_delete%found loopexecute immediate v_name;fetch cur_delete into v_name;end loop;dbms_output.put_line('将所有Table_XXX开头的表删除!');close cur_delete;end;执行PURGE TABLE ZYM_USER."BIN$UagqFGZsZcvgQAoKpSB9uQ==$0"--oracle todate函数,to_char 函数--oracle 24小时select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; --12小时select to_date('2005-01-01 2:14:20','yyyy-MM-dd HH12:mi:ss') from dual;select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;--mi是分钟select to_char(sysdate,'yyyy-MM-dd HH12:mi:ss') from dual;--12小时制--选取一个月前的日期select sysdate,sysdate-interval'1'month from dual;--选取一个年前的日期select sysdate,sysdate-interval'1'year from dual;--选取一天前的日期select sysdate,sysdate-interval'1'day from dual;--选取一小时前的日期select sysdate,sysdate-interval'1'hour from dual;--选取7分钟前的日期select sysdate,sysdate-interval'7'minute from dual;--选取时间间隔乘以一个数字的日期select sysdate,sysdate- 5* interval'1'month from dual;select sysdate,sysdate- 5* interval'1'day from dual;select sysdate,sysdate- 5* interval'1'hour from dual;select sysdate,sysdate- 5* interval'1'minute from dual; select sysdate,sysdate - interval'0'month from dual;--当前日期--oracle 获取guidselect sys_guid() from dual ;以24小时的形式显示出来要用HH24select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份oracle中的to_date参数含义1.日期格式参数含义说明D 一周中的星期几DAY 天的名字,使用空格填充到9个字符DD 月中的第几天DDD 年中的第几天DY 天的简写名IW ISO标准的年中的第几周IYYY ISO标准的四位年份YYYY 四位年份YYY,YY,Y 年份的最后三位,两位,一位HH 小时,按12小时计HH24 小时,按24小时计MI 分SS 秒MM 月Mon 月份的简写Month 月份的全名W 该月的第几个星期WW 年中的第几个星期--日期到字符操作select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual ;--24小时制select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') fromdual ;--18:47会变成 06:47select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual ;select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual;--trunk/ ROUND函数的使用select trunc(sysdate ,'YEAR') from dual ;--2014/1/1select trunc(sysdate ) from dual ;--2014/9/28select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual ;--2014--oracle有毫秒级的数据类型--返回当前时间年月日小时分秒毫秒select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual; --28-9月 -2014 18:50:35.64801--返回当前时间的秒毫秒,可以指定秒后面的精度(最大=9)select to_char(current_timestamp(9),'MI:SSxFF') fromdual;--50:35.751743000--oracle 计算程序运行的时间(ms)declaretype rc is ref cursor;l_rc rc;l_dummy all_objects.object_name%type;l_start number default dbms_utility.get_time;beginfor I in1 .. 1000loopopen l_rc for'select object_name from all_objects '||'where object_id = ' || i;fetch l_rc into l_dummy;close l_rc;end loop;dbms_output.put_line( round( (dbms_utility.get_time-l_start)/100, 2 ) || ' seconds...' );end;--对表进行重命名,不能指定所有者名,即不能指定表所属的数据库名称,如ytmat.t_biao_rookie_waybill_userename t_mat_rookie_waybill_use to t_biao_rookie_waybill_use6;--查询Drop操作删除的对象select * from recyclebin ;select count(*) from recyclebin ;使用drop 删除表drop table 表名称恢复:--注:必须9i或10g以上版本支持,flashback无法恢复全文索引flashback table表名称to before drop;。
oracle中to_date详细⽤法⽰例(oracle⽇期格式转换)这篇⽂章主要介绍了oracle中to_date详细⽤法⽰例,包括期和字符转换函数⽤法、字符串和时间互转、求某天是星期⼏、两个⽇期间的天数、⽉份差等⽤法TO_DATE格式(以时间:2007-11-02 13:45:25为例)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; //获取时间的秒2. 字符串和时间互转select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dualselect to_char( to_date(222,'J'),'Jsp') from dual //显⽰Two Hundred Twenty-Two3.求某天是星期⼏select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; //星期⼀select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; // monday//设置⽇期语⾔ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';//也可以这样TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4. 两个⽇期间的天数select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;5. 时间为null的⽤法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual; //注意要⽤TO_DATE(null)6.⽉份差a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')//那么12⽉31号中午12点之后和12⽉1号的12点之前是不包含在这个范围之内的。
oracle中to_date详细⽤法⽰例(oracle⽇期格式转换)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; //获取时间的秒2. 字符串和时间互转select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dualselect to_char( to_date(222,'J'),'Jsp') from dual //显⽰Two Hundred Twenty-Two3.求某天是星期⼏select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; //星期⼀select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; // monday//设置⽇期语⾔ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';//也可以这样TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4. 两个⽇期间的天数select floor(sysdate - to_date('20020405','yyyymmdd')) from dual5. 时间为null的⽤法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual; //注意要⽤TO_DATE(null)6.⽉份差a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')//那么12⽉31号中午12点之后和12⽉1号的12点之前是不包含在这个范围之内的。
oracle⽇期改字符格式_Oracle⽇期类型转换格式转⾄:https:///weixin_39629269/article/details/111537468将⽇期型转换成字符串时,可以按新的格式显⽰。
如格式YYYY-MM-DD HH24:MM:SS表⽰“年-⽉-⽇⼩时:分钟:秒”。
Oracle的⽇期类型是包含时间在内的。
主要的⽇期格式字符的含义如下表所⽰:代码代表的格式例⼦AM、PM上午、下午08 AMD数字表⽰的星期(1~7)1, 2, 3, ..., 7DD数字表⽰⽉中的⽇期(1~31)1, 2, 3, …, 31MM两位数的⽉份01, 02, …, 12Y、YY、YYY、YYYY年份的后⼏位8, 08, 008, 2008RR解决Y2K问题的年度转换DY简写的星期名MON, TUE, FRI, …DAY全拼的星期名MONDAY, TUESDAY, …MON简写的⽉份名JAN, FEB, MAR, …MONTH全拼的⽉份名JANUARY, FEBRUARY, …HH、HH1212⼩时制的⼩时(1~12)1, 2, 3, …, 12HH2424⼩时制的⼩时(0~23)0, 1, 2, …, 23MI分(0~59)0, 1, 2, …, 59SS秒(0~59)0, 1, 2, …, 59, . / - ; :原样显⽰的标点符号‘TEXT’引号中的⽂本原样显⽰TEXT例1:将⽇期转换成带时间和星期的字符串并显⽰。
SELECT TO_CHAR(sysdate, 'YYYY-MM-DD HH24:MI:SS AM DY') FROM dual;结果为:TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MM:SS-------------------------------------2009-01-06 15:01:15 下午星期⼆例2:2008年8⽉8⽇为星期⼏?SELECT TO_CHAR(TO_DATE('2008-08-08', 'YYYY-MM-DD'), 'DY') FROM dual;结果为:TO_CHA------星期五。
Oracle获取系统时间及格式化Oracle 获取当前⽇期及⽇期格式获取系统⽇期: SYSDATE()格式化⽇期: TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)或 TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)格式化数字: TO_NUMBER注: TO_CHAR 把⽇期或数字转换为字符串TO_CHAR(number, '格式')TO_CHAR(salary, '$99,999.99')TO_CHAR(date, '格式')TO_DATE 把字符串转换为数据库中的⽇期类型TO_DATE(char, '格式')TO_NUMBER 将字符串转换为数字TO_NUMBER(char, '格式')返回系统⽇期,输出 25-12⽉-09select sysdate from dual;mi是分钟,输出 2009-12-25 14:23:31select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;mm会显⽰⽉份,输出 2009-12-25 14:12:31select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;输出 09-12-25 14:23:31select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual输出 2009-12-25 14:23:31select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual⽽如果把上式写作:select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual则会报错,因为⼩时hh是12进制,14为⾮法输⼊,不能匹配。
oracle format 用法Oracle Format 是 Oracle 数据库中用于格式化日期、时间和数字的函数。
它允许用户根据自己的需求对日期、时间和数字进行格式化,并返回一个格式化后的字符串作为结果。
下面将对 Oracle Format 的用法进行详细介绍。
1. 格式化日期:- TO_CHAR函数:TO_CHAR(date, format) 函数用于将日期格式化为字符串。
其中,date 表示要格式化的日期,format 是指定日期格式的参数。
例如,TO_CHAR(SYSDATE, 'YYYY-MM-DD') 可以将当前日期格式化为'YYYY-MM-DD' 格式的字符串。
- 示例:SELECT TO_CHAR(hire_date, 'YYYY-MM-DD') FROM employees;2. 格式化时间:- TO_CHAR函数:TO_CHAR(date, format) 函数同样可以用于将时间格式化为字符串。
只需将时间部分放入到 date 参数中。
例如,TO_CHAR(SYSDATE, 'HH24:MI:SS') 可以将当前时间格式化为 'HH24:MI:SS' 格式的字符串。
- 示例:SELECT TO_CHAR(hire_date, 'HH24:MI:SS') FROM employees;3. 格式化数字:- TO_CHAR函数:TO_CHAR(number, format) 函数还可以将数字格式化为字符串。
其中,number 表示要格式化的数字,format 是指定数字格式的参数。
例如,TO_CHAR(salary, '$99,999.99') 可以将工资格式化为带有美元符号和千位分隔符的字符串。
- 示例:SELECT TO_CHAR(salary, '$99,999.99') FROM employees;需要注意的是,日期、时间和数字格式化字符串中的格式符号是有特定含义的,比如 'YYYY' 表示四位年份,'MM' 表示两位月份。
ORACLE日期时间函数大全TO_DATE格式(以时间:2007-11-02 13:45:25为例)Year:yy two digits 两位年显示值:07yyy three digits 三位年显示值:007yyyy four digits 四位年显示值:2007Month:mm number 两位月显示值:11mon abbreviated 字符集表示显示值:11月,若是英文版,显示novmonth spelled out 字符集表示显示值:11月,若是英文版,显示novemberDay:dd number 当月第几天显示值:02ddd number 当年第几天显示值:02dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示friday spelled out 当周第几天全写显示值:星期五,若是英文版,显示friday ddspth spelled out, ordinal twelfthHour:hh two digits 12小时进制显示值:01hh24 two digits 24小时进制显示值:13Minute:mi two digits 60进制显示值:45Second:ss two digits 60进制显示值:25其它Q digit 季度显示值:4WW digit 当年第几周显示值:44W digit 当月第几周显示值:124小时格式下时间范围为:0:00:00 - 23:59:59....12小时格式下时间范围为:1:00:00 - 12:59:59 ....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; //获取时间的秒select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//2.select to_char( to_date(222,'J'),'Jsp') from dual显示Two Hundred Twenty-Two3.求某天是星期几select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;星期一select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;monday设置日期语言ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4. 两个日期间的天数select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;5. 时间为null的用法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual;注意要用TO_DATE(null)6.月份差a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd') 那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
详解oracle⽇期格式(总结)to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错。
即按照第⼆个参数的格式解释第⼀个参数。
to_char(⽇期,"转换格式" ) 即把给定的⽇期按照“转换格式”转换。
转换的格式:表⽰year的:y 表⽰年的最后⼀位 yy 表⽰年的最后2位 yyy 表⽰年的最后3位 yyyy ⽤4位数表⽰年表⽰month的:mm ⽤2位数字表⽰⽉;mon ⽤简写形式⽐如11⽉或者nov ;month ⽤全称⽐如11⽉或者november表⽰day的:dd 表⽰当⽉第⼏天;ddd表⽰当年第⼏天;dy 当周第⼏天简写⽐如星期五或者fri;day当周第⼏天全写⽐如星期五或者friday。
表⽰hour的:hh 2位数表⽰⼩时 12进制; hh24 2位数表⽰⼩时 24⼩时表⽰minute的:mi 2位数表⽰分钟表⽰second的:ss 2位数表⽰秒 60进制表⽰季度的:q ⼀位数表⽰季度(1-4)另外还有ww ⽤来表⽰当年第⼏周 w⽤来表⽰当⽉第⼏周。
24⼩时制下的时间范围:00:00:00-23:59:5912⼩时制下的时间范围:1:00:00-12:59:59⽐如:select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual //显⽰:08-11-07 13:22:42select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual //显⽰:2005-12-25 13:25:59⽽如果把上式写作:select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual,则会报错,因为⼩时hh是12进制,13为⾮法输⼊,不能匹配。
oracle to_date用法Oracle中的to_date函数用于将一个字符串转换成日期数据类型。
to_date函数的基本语法如下:to_date(string, format)其中,string是待转换的字符串,format是指定的日期格式。
to_date函数将字符串按照指定的格式(format)转换成日期类型。
日期格式由各种特殊字符组成,这些特殊字符在to_date函数中有特定的含义。
以下是常用的日期格式特殊字符及其含义:-YYYY:年份,四位数表示-YY:年份,两位数表示-MM:月份,两位数表示-MON:英文缩写的月份-DD:日期,两位数表示-HH:小时,两位数表示(24小时制)-MI:分钟,两位数表示-SS:秒数,两位数表示除了以上常用的日期格式特殊字符,还有其他一些特殊字符可以在格式字符串中使用,如:-'月':用于指定月份的中文名称-'日':用于指定日期的中文名称-'/'、'-'、'.'等:用于指定日期中的分隔符以下是一些使用to_date函数的示例:1.将字符串'2022-02-14'转换成日期类型:SELECT to_date('2022-02-14', 'YYYY-MM-DD') FROM dual;返回结果:2022-02-1400:00:002.将字符串'2022/02/1412:34:56'转换成日期类型:SELECT to_date('2022/02/14 12:34:56', 'YYYY/MM/DDHH24:MI:SS') FROM dual;返回结果:2022-02-1412:34:563.将字符串'二零二二年二月十四日'转换成日期类型:SELECT to_date('二零二二年二月十四日', 'YYYY"年"FM"月"FM"日"') FROM dual;返回结果:2022-02-1400:00:00需要注意的是,to_date函数在转换字符串为日期时,会根据指定的格式对字符串进行解析,如果解析失败将会引发错误。
一、date类型:1.在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98'在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如'21-8月-2003'或'21-8月-03'2.时间转换函数:to_date() 作用将字符类型按一定格式转化为日期类型:具体用法:to_date(''2004-11-27'',''yyyy-mm-dd''),前者为字符串,后者为转换日期格式,注意,前后两者要以一对应。
如;to_date(''2004-11-27 13:34:43'', ''yyyy-mm-dd hh24:mi:ss'') 将得到具体的时间。
to_char() 将日期转按一定格式换成字符类型:具体用法:to_char(sysdate,''yyyy-mm-dd hh24:mi:ss'')3.在sql plus中执行select操作,date类型字段中只显示了日期,时间并未显示。
4.Oracle的date数据类型的另一个优点是:它支持日期的运算。
可以对已经存在的日期加上或减去若干天,例如:insert into student values('熊',sysdate+7);5.附:oracle日期格式参数含义说明d:一周中的星期几day:天的名字,使用空格填充到9个字符dd:月中的第几天ddd:年中的第几天dy:天的简写名iw: ISO标准的年中的第几周iyyy:ISO标准的四位年份yyyy:四位年份yyy,yy,y:年份的最后三位,两位,一位hh: 小时,按12小时计hh24:小时,按24小时计mi:分ss:秒mm:月mon:月份的简写month:月份的全名w:该月的第几个星期ww:年中的第几个星期二、有关时间日期的操作sysdate + 1/24/60/60 在系统时间基础上延迟1秒sysdate + 1/24/60 在系统时间基础上延迟1分钟sysdate + 1/24 在系统时间基础上延迟1小时sysdate + 1 在系统时间基础上延迟1天add_months(sysdate,-1) 在系统时间基础上延迟1月add_months(sysdate,-1*12) 在系统时间基础上延迟1年上月末的日期:select last_day(add_months(sysdate, -1)) from dual;本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual本周星期一的日期:select trunc(sysdate,'day') + 1 from dual年初至今的天数:select ceil(sysdate - trunc(sysdate, 'year')) from dual;本月的天数SELECT to_char(last_day(SYSDATE),'dd') days FROM dual今年的天数select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual下个星期一的日期SELECT Next_day(SYSDATE,'monday') FROM dual--计算工作日方法create table t(s date,e date);alter session set nls_date_format = 'yyyy-mm-dd';insert into t values('2003-03-01','2003-03-03');insert into t values('2003-03-02','2003-03-03');insert into t values('2003-03-07','2003-03-08');insert into t values('2003-03-07','2003-03-09');insert into t values('2003-03-05','2003-03-07');insert into t values('2003-02-01','2003-03-31');-- 这里假定日期都是不带时间的,否则在所有日期前加trunc即可。
oracle日期格式总结在oracle中处理日期大全TO_DATE格式Day:dd number 12dy abbreviated friday spelled out fridayddspth spelled out, ordinal twelfthMonth:mm number 03mon abbreviated marmonth spelled out marchYear:yy two digits 98yyyy four digits 199824小时格式下时间范围为: 0:00:00 - 23:59:59....12小时格式下时间范围为: 1:00:00 - 12:59:59 ....1.日期和字符转换函数用法(to_date,to_char)2.select to_char( to_date(222,'J'),'Jsp') from dual显示Two Hundred Twenty-Two3.求某天是星期几select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;星期一selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;monday设置日期语言ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')4.两个日期间的天数select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;5. 时间为null的用法select id, active_date from table1UNIONselect 1, TO_DATE(null) from dual;注意要用TO_DATE(null)6.a_date between to_date('20011201','yyyymmdd') andto_date('20011231','yyyymmdd')那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的7. 日期格式冲突问题输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'alter system set NLS_DATE_LANGUAGE = Americanalter session set NLS_DATE_LANGUAGE = American或者在to_date中写selectto_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,可查看select * from nls_session_parametersselect * from V$NLS_PARAMETERS8.select count(*)from ( select rownum-1 rnumfrom all_objectswhere rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-02-01','yyyy-mm-dd')+1)where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )notin ( '1', '7' )查找2002-02-28至2002-02-01间除星期一和七的天数在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).9.select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;1select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;1.0322580645161310. Next_day的用法Next_day(date, day)Monday-Sunday, for format code DAYMon-Sun, for format code DY1-7, for format code D11select to_char(sysdate,'hh:mi:ss') TIME from all_objects注意:第一条记录的TIME 与最后一行是一样的可以建立一个函数来处理这个问题create or replace function sys_date return date isbeginreturn sysdate;end;select to_char(sys_date,'hh:mi:ss') from all_objects;12.获得小时数SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer SQL> select sysdate ,to_char(sysdate,'hh') from dual;SYSDATE TO_CHAR(SYSDATE,'HH')-------------------- ---------------------2003-10-13 19:35:21 07SQL> select sysdate ,to_char(sysdate,'hh24') from dual; SYSDATE TO_CHAR(SYSDATE,'HH24')-------------------- -----------------------2003-10-13 19:35:21 19获取年月日与此类似13.年月日的处理select older_date,newer_date,years,months,abs(trunc(newer_date-add_months( older_date,years*12+months ))) daysfrom ( selecttrunc(months_between( newer_date, older_date )/12) YEARS, mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,newer_date,older_datefrom ( select hiredate older_date,add_months(hiredate,rownum)+rownum newer_datefrom emp ))14.处理月份天数不定的办法select to_char(add_months(last_day(sysdate) +1, -2),'yyyymmdd'),last_day(sysdate) from dual16.找出今年的天数select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual闰年的处理方法to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )如果是28就不是闰年17.yyyy与rrrr的区别'YYYY99 TO_C------- ----yyyy 99 0099rrrr 99 1999yyyy 01 0001rrrr 01 200118.不同时区的处理select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdatefrom dual;19.5秒钟一个间隔Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) *300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')from dual2002-11-1 9:55:00 35786SSSSS表示5位秒数20.一年的第几天select TO_CHAR(SYSDATE,'DDD'),sysdate from dual310 2002-11-6 10:03:5121.计算小时,分,秒,毫秒selectDays,A,TRUNC(A*24) Hours,TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSecondsfrom(selecttrunc(sysdate) Days,sysdate - trunc(sysdate) Afrom dual)select * from tabnameorder by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');//floor((date2-date1) /365) 作为年floor((date2-date1, 365) /30) 作为月mod(mod(date2-date1, 365), 30)作为日.23.next_day函数next_day(sysdate,6)是从当前开始下一个星期五。