志在指尖
用双手敲打未来

oracle to_date(函数用法)

oracleto_date

TO_DATE格局(以时刻:2007-11-0213:45:25为例)
1.日期和字符转换函数用法(to_date,to_char)
代码如下:
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’)asnowTimefromdual;//日期转化为字符串
selectto_char(sysdate,’yyyy’)asnowYearfromdual;//获取时刻的年
selectto_char(sysdate,’mm’)asnowMonthfromdual;//获取时刻的月
selectto_char(sysdate,’dd’)asnowDayfromdual;//获取时刻的日
selectto_char(sysdate,’hh24′)asnowHourfromdual;//获取时刻的时
selectto_char(sysdate,’mi’)asnowMinutefromdual;//获取时刻的分
selectto_char(sysdate,’ss’)asnowSecondfromdual;//获取时刻的秒
2.字符串和时刻互转
代码如下:
selectto_date(‘2004-05-0713:23:44′,’yyyy-mm-ddhh24:mi:ss’)fromdual
selectto_char(to_date(222,’J’),’Jsp’)fromdual//显现TwoHundredTwenty-Two
3.求某天是星期几
代码如下:
selectto_char(to_date(‘2002-08-26′,’yyyy-mm-dd’),’day’)fromdual;//星期一
selectto_char(to_date(‘2002-08-26′,’yyyy-mm-dd’),’day’,
‘NLS_DATE_LANGUAGE=American’)fromdual;//monday
//设置日期语言
ALTERSESSIONSETNLS_DATE_LANGUAGE=’AMERICAN’;
//也可以这样
TO_DATE(‘2002-08-26′,’YYYY-mm-dd’,’NLS_DATE_LANGUAGE=American’)
4.两个日期间的天数
代码如下:
selectfloor(sysdate-to_date(‘20020405′,’yyyymmdd’))fromdual;
5.时刻为null的用法
代码如下:
selectid,active_datefromtable1
UNION
select1,TO_DATE(null)fromdual;//留意要用TO_DATE(null)
6.月份差
代码如下:
a_datebetweento_date(‘20011201′,’yyyymmdd’)andto_date(‘20011231′,’yyyymmdd’)
//那么12月31号中午12点之后和12月1号的12点之前是不包括在这个规模之内的。
//所以,当时刻需求准确的时候,觉得to_char仍是必要的
7.日期格局冲突问题
输入的格局要看你安装的ORACLE字符集的类型,比如:US7ASCII,date格局的类型便是:’01-Jan-01′
代码如下:
altersystemsetNLS_DATE_LANGUAGE=American
altersessionsetNLS_DATE_LANGUAGE=American
//或者在to_date中写
selectto_char(to_date(‘2002-08-26′,’yyyy-mm-dd’),
‘day’,’NLS_DATE_LANGUAGE=American’)fromdual;
//留意我这仅仅举了NLS_DATE_LANGUAGE,当然还有很多,可检查
select*fromnls_session_parameters
select*fromV$NLS_PARAMETERS
8.查询特殊条件天数
代码如下:
selectcount(*)
from(selectrownum-1rnum
fromall_objects
whererownum<=to_date(‘2002-02-28′,’yyyy-mm-dd’)-to_date(‘2002-
02-01′,’yyyy-mm-dd’)+1
)
whereto_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.查找月份
代码如下:
selectmonths_between(to_date(’01-31-1999′,’MM-DD-YYYY’),
to_date(’12-31-1998′,’MM-DD-YYYY’))”MONTHS”FROMDUAL;
//成果为:1
selectmonths_between(to_date(’02-01-1999′,’MM-DD-YYYY’),
to_date(’12-31-1998′,’MM-DD-YYYY’))”MONTHS”FROMDUAL;
//成果为:1.03225806451613
10.Next_day的用法
代码如下:
Next_day(date,day)
Monday-Sunday,forformatcodeDAY
Mon-Sun,forformatcodeDY
1-7,forformatcodeD
11.取得小时数
代码如下:
//extract()找出日期或距离值的字段值
SELECTEXTRACT(HOURFROMTIMESTAMP’2001-02-162:38:40′)fromoffer
selectsysdate,to_char(sysdate,’hh’)fromdual;
SYSDATETO_CHAR(SYSDATE,’HH’)
—————————————–
2003-10-1319:35:2107
selectsysdate,to_char(sysdate,’hh24′)fromdual;
SYSDATETO_CHAR(SYSDATE,’HH24′)oracle
——————————————-
2003-10-1319:35:2119
12.年月日的处理
代码如下:
SELECT
older_date,
newer_date,
years,
months,
ABS(
TRUNC(
newer_date-ADD_MONTHS(older_date,years*12+months)
)
)days
FROM
(
SELECT
TRUNC(
MONTHS_BETWEEN(newer_date,older_date)/12
)YEARS,
MOD(
TRUNC(
MONTHS_BETWEEN(newer_date,older_date)
),
12
)MONTHS,
newer_date,
older_date
FROM
(
SELECT
hiredateolder_date,
ADD_MONTHS(hiredate,ROWNUM)+ROWNUMnewer_date
FROM
emp
)
)
13.处理月份天数不定的方法
代码如下:
selectto_char(add_months(last_day(sysdate)+1,-2),’yyyymmdd’),last_day(sysdate)fromdual
14.找出本年的天数
代码如下:
selectadd_months(trunc(sysdate,’year’),12)-trunc(sysdate,’year’)fromdual
//闰年的处理方法
to_char(last_day(to_date(’02’||:year,’mmyyyy’)),’dd’)
//如果是28就不是闰年
15.yyyy与rrrr的差异
代码如下:
YYYY99TO_C
———–
yyyy990099
rrrr991999
yyyy010001
rrrr012001
16.不同时区的处理
代码如下:
selectto_char(NEW_TIME(sysdate,’GMT’,’EST’),’dd/mm/yyyyhh:mi:ss’),
sysdatefromdual;
17.5秒钟一个距离
代码如下:
SelectTO_DATE(FLOOR(TO_CHAR(sysdate,’SSSSS’)/300)*300,’SSSSS’),
TO_CHAR(sysdate,’SSSSS’)fromdual
//2002-11-19:55:0035786
//SSSSS表明5位秒数
18.一年的第几天
代码如下:
selectTO_CHAR(SYSDATE,’DDD’),sysdatefromdual
//3102002-11-610:03:51
19.计算小时,分,秒,毫秒
代码如下:
SELECT
Days,
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)
)mSeconds
FROM
(
SELECT
TRUNC(SYSDATE)Days,
SYSDATE-TRUNC(SYSDATE)A
FROM
dual
)SELECT
*
FROM
tabname
ORDERBY
DECODE(MODE,’FIFO’,1,-1)*TO_CHAR(rq,’yyyymmddhh24miss’)
//floor((date2-date1)/365)作为年
//floor((date2-date1,365)/30)作为月
//d(mod(date2-date1,365),30)作为日.
20.next_day函数
代码如下:
//回来下个星期的日期,day为1-7或周日-星期六,1表明周日
next_day(sysdate,6)是从当时开端下一个星期五。后面的数字是从周日开端算起。
//1234567
//日一二三四五六
select(sysdate-to_date(‘2003-12-0312:55:45′,’yyyy-mm-ddhh24:mi:ss’))*24*60*60fromdual
//日期回来的是天然后转换为ss
21,round[舍入到最接近的日期](day:舍入到最接近的周日)
代码如下:
selectsysdateS1,
round(sysdate)S2,
round(sysdate,’year’)YEAR,
round(sysdate,’month’)MONTH,
round(sysdate,’day’)DAYfromdual
22,trunc[切断到最接近的日期,单位为天],回来的是日期类型
代码如下:
selectsysdateS1,
trunc(sysdate)S2,//回来当时日期,无时分秒
trunc(sysdate,’year’)YEAR,//回来当时年的1月1日,无时分秒
trunc(sysdate,’month’)MONTH,//回来当时月的1日,无时分秒
trunc(sysdate,’day’)DAY//回来当时星期的星期天,无时分秒
fromdual
23,回来日期列表中最晚日期
代码如下:
selectgreatest(’01-1月-04′,’04-1月-04′,’10-2月-04′)fromdual
24.计算时刻差
代码如下:
注:oracle时刻差是以天数为单位,所以换算成年月,日
selectfloor(to_number(sysdate-to_date(‘2007-11-0215:55:03’,
‘yyyy-mm-ddhh24:mi:ss’))/365)asspanYearsfromdual//时刻差-年
selectceil(moths_between(sysdate-to_date(‘2007-11-0215:55:03’,
‘yyyy-mm-ddhh24:mi:ss’)))asspanMonthsfromdual//时刻差-月
selectfloor(to_number(sysdate-to_date(‘2007-11-0215:55:03’,
‘yyyy-mm-ddhh24:mi:ss’)))asspanDaysfromdual//时刻差-天
selectfloor(to_number(sysdate-to_date(‘2007-11-0215:55:03’,
‘yyyy-mm-ddhh24:mi:ss’))*24)asspanHoursfromdual//时刻差-时
selectfloor(to_number(sysdate-to_date(‘2007-11-0215:55:03’,
‘yyyy-mm-ddhh24:mi:ss’))*24*60)asspanMinutesfromdual//时刻差-分
selectfloor(to_number(sysdate-to_date(‘2007-11-0215:55:03’,
‘yyyy-mm-ddhh24:mi:ss’))*24*60*60)asspanSecondsfromdual//时刻差-秒
25.更新时刻
代码如下:
//oracle时刻加减是以天数为单位,设改动量为n,所以换算成年月,日
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),
to_char(sysdate+n*365,’yyyy-mm-ddhh24:mi:ss’)asnewTimefromdual//改动时刻-年
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),
add_months(sysdate,n)asnewTimefromdual//改动时刻-月
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),
to_char(sysdate+n,’yyyy-mm-ddhh24:mi:ss’)asnewTimefromdual//改动时刻-日
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),
to_char(sysdate+n/24,’yyyy-mm-ddhh24:mi:ss’)asnewTimefromdual//改动时刻-时
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),
to_char(sysdate+n/24/60,’yyyy-mm-ddhh24:mi:ss’)asnewTimefromdual//改动时刻-分
selectto_char(sysdate,’yyyy-mm-ddhh24:mi:ss’),
to_char(sysdate+n/24/60/60,’yyyy-mm-ddhh24:mi:ss’)asnewTimefromdual//改动时刻-秒
26.查找月的第一天,最后一天
————————————————
版权声明:本文为CSDN博主「天堂地址不详Y」的原创文章,遵从CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiantangdizhibuxiang/article/details/81035305
oracleto_date函数用法
to_date()是Oracle数据库函数的代表函数之一,下文对Oracleto_date()函数的几种用法作了详细的介绍阐明,需要的朋友能够参考下
在Oracle数据库中,Oracleto_date()函数是我们经常运用的函数,下面就为您详细介绍Oracleto_date()函数的用法,期望能够对您有所启迪。
to_date()与24小时制表明法及mm分钟的显现:
一、在运用Oracle的to_date函数来做日期转换时,许多Java程序员也许会直接的选用”yyyy-MM-ddHH:mm:ss”的格局作为格局进行转换,但是在Oracle中会引起过错:”ORA01810格局代码出现两次”。
selectto_date(‘2005-01-0113:14:20′,’yyyy-MM-ddHH24:mm:ss’)fromdual;
如:
原因是SQL中不区别大小写,MM和mm被认为是相同的格局代码,所以Oracle的SQL选用了mi替代分钟。
selectto_date(‘2005-01-0113:14:20′,’yyyy-MM-ddHH24:mi:ss’)fromdual;
二、另要以24小时的方式显现出来要用HH24
selectto_char(sysdate,’yyyy-MM-ddHH24:mi:ss’)fromdual;//mi是分钟
selectto_char(sysdate,’yyyy-MM-ddHH24:mm:ss’)fromdual;//mm会显现月份
oracle中的to_date参数意义
1.日期格局参数意义阐明
D一周中的星期几
DAY天的名字,运用空格填充到9个字符
DD月中的第几天
DDD年中的第几天
DY天的简写名
IWISO规范的年中的第几周
IYYYISO规范的四位年份
YYYY四位年份
YYY,YY,Y年份的最终三位,两位,一位
HH小时,按12小时计
HH24小时,按24小时计
MI分
SS秒
MM月
Mon月份的简写
Month月份的全名
W该月的第几个星期
WW年中的第几个星期1.日期时刻距离操作
当时时刻减去7分钟的时刻
selectsysdate,sysdate-interval’7’MINUTEfromdual
当时时刻减去7小时的时刻
selectsysdate-interval’7’hourfromdual
当时时刻减去7天的时刻
selectsysdate-interval’7’dayfromdual
当时时刻减去7月的时刻
selectsysdate,sysdate-interval’7’monthfromdual
当时时刻减去7年的时刻
selectsysdate,sysdate-interval’7’yearfromdual
时刻距离乘以一个数字
selectsysdate,sysdate-8*interval’2’hourfromdual
2.日期到字符操作
selectsysdate,to_char(sysdate,’yyyy-mm-ddhh24:mi:ss’)fromdual
selectsysdate,to_char(sysdate,’yyyy-mm-ddhh:mi:ss’)fromdual
selectsysdate,to_char(sysdate,’yyyy-dddhh:mi:ss’)fromdual
selectsysdate,to_char(sysdate,’yyyy-mmiw-dhh:mi:ss’)fromdual
参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
3.字符到日期操作
selectto_date(‘2003-10-1721:15:37′,’yyyy-mm-ddhh24:mi:ss’)fromdual
详细用法和上面的to_char差不多。
4.trunk/ROUND函数的运用
selecttrunc(sysdate,’YEAR’)fromdual
selecttrunc(sysdate)fromdual
selectto_char(trunc(sysdate,’YYYY’),’YYYY’)fromdual
5.oracle有毫秒级的数据类型
–回来当时时刻年月日小时分秒毫秒
selectto_char(current_timestamp(5),’DD-MON-YYYYHH24:MI:SSxFF’)fromdual;
–回来当时时刻的秒毫秒,能够指定秒后面的精度(最大=9)
selectto_char(current_timestamp(9),’MI:SSxFF’)fromdual;
6.核算程序运转的时刻(ms)
declare
typercisrefcursor;
l_rcrc;
l_dummyall_objects.object_name%type;
l_startnumberdefaultdbms_utility.get_time;
begin
forIin1..1000
loop
openl_rcfor
‘selectobject_namefromall_objects’||
‘whereobject_id=’||i;
fetchl_rcintol_dummy;
closel_rc;
endloop;
dbms_output.put_line
(round((dbms_utility.get_time-l_start)/100,2)||
‘seconds…’);
end;

未经允许不得转载:IT技术网站 » oracle to_date(函数用法)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载