Oracle时间格式
oracle格式化日期

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 与上类似以指定长度返回数值格式,不过如果被格式化的数值长度短于指定格式,则以空格补⾜。
oracle timestamp类型

oracle timestamp类型
Oracle中的Timestamp类型是一种日期时间数据类型,它可以存储日期和时间,精确到纳秒级别。
它可以被视为是Oracle中更精确的Date类型。
Timestamp类型可以表示从公元4712年1月1日到当前日期和时间之间的时间间隔。
在Oracle中,Timestamp类型的格式为'YYYY-MM-DD
HH:MI:SS.FF',其中YYYY表示年份,MM表示月份,DD表示日期,HH 表示小时,MI表示分钟,SS表示秒,而FF表示的是精确到纳秒级别的分数。
Timestamp类型的默认精度为6,即精确到微秒级别。
在查询中,可以使用Oracle的内置函数来处理Timestamp类型的数据,例如:
- TO_TIMESTAMP:将一个字符串转换成Timestamp类型的值。
- EXTRACT:从Timestamp类型的值中提取特定的部分,例如年、月、日、小时、分钟等。
- TIMESTAMPADD:向Timestamp类型的值中添加或减去指定的时间间隔。
使用Timestamp类型的主要优点在于它可以提供更高的精确度和灵活性,特别是在需要计算时间间隔或需要进行时间戳比较时。
但是,Timestamp类型也需要更多的存储空间和处理时间,因此在使用时需要权衡其优缺点。
- 1 -。
oracle date format时区写法

一、介绍Oracle Date Format时区写法的作用在Oracle数据库中,日期格式化是非常重要的一项功能。
日期时间数据在数据库中是以UNIX时间戳的形式存储的,它表示从格林威治时间1970年1月1日零点零分零秒到当前时间的秒数。
为了方便人们阅读和理解日期时间数据,Oracle提供了一系列的日期格式化函数和格式化符号,以便将日期时间数据以人们可读的形式显示出来。
其中,时区写法在日期格式化中起着非常重要的作用。
本文将介绍Oracle Date Format时区写法的格式和使用方法。
二、Oracle Date Format时区写法的基本格式在Oracle中,日期时间数据的格式化符号由一些特定的标记组成,可以根据不同的标记组合来得到不同的日期时间格式化结果。
而时区写法主要包括以下几种格式:1. 时区偏移量表示法:使用符号"+"或"-"加上时区的小时和分钟来表示时区的偏移量,例如"+08:00"表示东八区,"-05:00"表示西五区。
2. 时区区域表示法:直接使用时区区域的名称来表示时区,例如"Asia/Shangh本人"表示上海时区,"America/New_York"表示纽约时区。
3. 其他表示法:还有一些其他非标准的时区表示法,如三位字母缩写表示时区,例如"EST"表示美国东部标准时间。
三、Oracle Date Format时区写法的用法示例下面通过一些具体的示例来介绍Oracle Date Format时区写法的使用方法。
1. 使用时区偏移量表示法:```sqlSELECT TO_CHAR(SYSTIMESTAMP AT TIME ZONE '+08:00','YYYY-MM-DD HH24:MI:SS TZR') FROM DUAL;-- 输出结果示例:2021-09-30 16:32:52 CST```2. 使用时区区域表示法:```sqlSELECT TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'Asia/Shangh 本人', 'YYYY-MM-DD HH24:MI:SS TZR') FROM DUAL;-- 输出结果示例:2021-09-30 16:32:52 CST```3. 其他表示法:```sqlSELECT TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'EST', 'YYYY-MM-DD HH24:MI:SS TZR') FROM DUAL;-- 输出结果示例:2021-09-30 04:32:52 EST```四、Oracle Date Format时区写法的注意事项在使用Oracle Date Format时区写法时,需要注意以下几点:1. 时区表示法的选择:根据具体的业务需求和应用场景,选择合适的时区表示法。
OracleSQL日期及日期格式获取命令

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中年月日时分秒的格式化方法。
二、日期和时间的数据类型在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)

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点之前是不包含在这个范围之内的。
【Oracle】Oracle时间日期格式

【Oracle】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()与24小时制表示法及mm分钟的显示:一、在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会和我一样,直觉的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。
如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') 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会显示月份to_date() 与 to_char() 日期和字符串转换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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1:取得当前日期是本月的第几周SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YY-------------------20030327 4 18:16:09SQL> select to_char(sysdate,'W') from dual;T-42:取得当前日期是一个星期中的第几天,注意星期日是第一天SQL> select sysdate,to_char(sysdate,'D') from dual;SYSDATE T--------- -27-MAR-03 5类似:select to_char(sysdate,'yyyy') from dual; --年select to_char(sysdate,'Q' from dual; --季select to_char(sysdate,'mm') from dual; --月select to_char(sysdate,'dd') from dual; --日ddd 年中的第几天WW 年中的第几个星期W 该月中第几个星期D 周中的星期几hh 小时(12)hh24 小时(24)Mi 分ss 秒3:取当前日期是星期几中文显示:SQL> select to_char(sysdate,'day') from dual;TO_CHAR(SYSDATE,'DAY')----------------------星期四4:如果一个表在一个date类型的字段上面建立了索引,如何使用alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'5: 得到当前的日期select sysdate from dual;6: 得到当天凌晨0点0分0秒的日期select trunc(sysdate) from dual;-- 得到这天的最后一秒select trunc(sysdate) + 0.99999 from dual;-- 得到小时的具体数值select trunc(sysdate) + 1/24 from dual;select trunc(sysdate) + 7/24 from dual;7.得到明天凌晨0点0分0秒的日期select trunc(sysdate+1) from dual;select trunc(sysdate)+1 from dual;8: 本月一日的日期select trunc(sysdate,'mm') from dual;9:得到下月一日的日期select trunc(add_months(sysdate,1),'mm') from dual;10:返回当前月的最后一天?select last_day(sysdate) from dual;select last_day(trunc(sysdate)) from dual;select trunc(last_day(sysdate)) from dual;select trunc(add_months(sysdate,1),'mm') - 1 from dual;11: 得到一年的每一天select trunc(sysdate,'yyyy')+ rn -1 date0from(select rownum rn from all_objectswhere rownum<366);12:今天是今年的第N天SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;13:如何在给现有的日期加上2年select add_months(sysdate,24) from dual;14:判断某一日子所在年分是否为润年select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;15:判断两年后是否为润年select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),'dd'),'29','闰年','平年') from dual;16:得到日期的季度select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;select to_char(sysdate, 'Q') from dual;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点之前是不包含在这个范围之内的。
所以,当时间需要精确的时候,觉得to_char还是必要的7. 日期格式冲突问题输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'alter system set NLS_DATE_LANGUAGE = Americanalter session set NLS_DATE_LANGUAGE = American或者在to_date中写select to_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' )not in ( '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.获得小时数extract()找出日期或间隔值的字段值SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offerSQL> 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 1913.年月日的处理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) 作为月d(mod(date2-date1, 365), 30)作为日.23.next_day函数返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日next_day(sysdate,6)是从当前开始下一个星期五。