文档库 最新最全的文档下载
当前位置:文档库 › Oracle中TO_DATE格式

Oracle中TO_DATE格式

Oracle中TO_DATE格式
Oracle中TO_DATE格式

Oracle中TO_DATE格式

TO_DATE格式(以时间:2007-11-02 13:45:25为例)

Year:

yy two digits 两位年显示值:07

yyy three digits 三位年显示值:007

yyyy four digits 四位年显示值:2007

Month:

mm number 两位月显示值:11

mon abbreviated 字符集表示显示值:11月,若是英文版,显示nov

month spelled out 字符集表示显示值:11月,若是英文版,显示november

Day:

dd number 当月第几天显示值:02

ddd number 当年第几天显示值:02

dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示fri

day spelled out 当周第几天全写显示值:星期五,若是英文版,显示friday ddspth spelled out, ordinal twelfth

Hour:

hh two digits 12小时进制显示值:01

hh24 two digits 24小时进制显示值:13

Minute:

mi two digits 60进制显示值:45

Second:

ss two digits 60进制显示值:25

其它

Q digit 季度显示值:4

WW digit 当年第几周显示值:44

W digit 当月第几周显示值:1

24小时格式下时间范围为: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-Two

3.求某天是星期几

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 table1

UNION

select 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 = American

alter 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_parameters

select * from V$NLS_PARAMETERS

8.

select count(*)

from ( select rownum-1 rnum

from all_objects

where 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;

1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY'))

"MONTHS" FROM DUAL;

1.03225806451613

10. Next_day的用法

Next_day(date, day)

Monday-Sunday, for format code DAY

Mon-Sun, for format code DY

1-7, for format code D

11

select to_char(sysdate,'hh:mi:ss') TIME from all_objects

注意:第一条记录的TIME 与最后一行是一样的

可以建立一个函数来处理这个问题

create or replace function sys_date return date is

begin

return 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 offer SQL> select sysdate ,to_char(sysdate,'hh') from dual;

SYSDATE TO_CHAR(SYSDATE,'HH')

-------------------- ---------------------

2003-10-13 19:35:21 07

SQL> 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 )

)

) 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 hiredate older_date, add_months(hiredate,rownum)+rownum newer_date

from emp

)

)

14.处理月份天数不定的办法

select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual 16.找出今年的天数

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 0099

rrrr 99 1999

yyyy 01 0001

rrrr 01 2001

18.不同时区的处理

select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate from dual;

19.5秒钟一个间隔

Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) *

300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')

from dual

2002-11-1 9:55:00 35786

SSSSS表示5位秒数

20.一年的第几天

select TO_CHAR(SYSDATE,'DDD'),sysdate from dual

310 2002-11-6 10:03:51

21.计算小时,分,秒,毫秒

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

order 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)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

1 2 3 4 5 6 7

日一二三四五六

---------------------------------------------------------------

select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual 日期返回的是天然后转换为ss

24,round[舍入到最接近的日期](day:舍入到最接近的星期日)

select sysdate S1,

round(sysdate) S2 ,

round(sysdate,'year') YEAR,

round(sysdate,'month') MONTH ,

round(sysdate,'day') DAY from dual

25,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型

select sysdate S1,

trunc(sysdate) S2, //返回当前日期,无时分秒

trunc(sysdate,'year') YEAR, //返回当前年的1月1日,无时分秒

trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒

trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒

from dual

26,返回日期列表中最晚日期

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

27.计算时间差

注:oracle时间差是以天数为单位,所以换算成年月,日

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //时间差-年

select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //时间差-月

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as

spanDays from dual //时间差-天

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //时间差-时

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //时间差-分

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd

hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒

28.更新时间

注:oracle时间加减是以天数为单位,设改变量为n,所以换算成年月,日

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-年

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from

dual //改变时间-月

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-日

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-时

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-分

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd

hh24:mi:ss') as newTime from dual //改变时间-秒

29.查找月的第一天,最后一天

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_Month

FROM dual;

Oracle时间操作大全

sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟5小时 sysdate+5 在系统时间基础上延迟5天 add_months(sysdate,-5) 在系统时间基础上延迟5月 add_months(sysdate,-5*12) 在系统时间基础上延迟5年 上月末的日期: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(sysdate,'fmww') from dual 今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" 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即可。 select s,e,e-s+1 total_days, trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'

数据库日期格式处理(Oracle)

TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年显示值:07 yyy three digits 三位年显示值:007 yyyy four digits 四位年显示值:2007 Month: mm number 两位月显示值:11 mon abbreviated 字符集表示显示值:11月,若是英文版,显示nov month spelled out 字符集表示显示值:11月,若是英文版,显示november Day: dd number 当月第几天显示值:02 ddd number 当年第几天显示值:02 dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示fri day spelled out 当周第几天全写显示值:星期五,若是英文版,显示friday ddspth spelled out, ordinal twelfth Hour: hh two digits 12小时进制显示值:01 hh24 two digits 24小时进制显示值:13 Minute: mi two digits 60进制显示值:45 Second: ss two digits 60进制显示值:25 其它 Q digit 季度显示值:4 WW digit 当年第几周显示值:44 W digit 当月第几周显示值:1 24小时格式下时间范围为: 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; //获取时间的日

oracle处理日期时间

Oracle时间日期操作 sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟5小时 sysdate+5 在系统时间基础上延迟5天 add_months(sysdate,-5) 在系统时间基础上延迟5月 add_months(sysdate,-5*12) 在系统时间基础上延迟5年 上月末的日期: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(sysdate,'fmww') from dual 今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" 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即可。 select s,e,e-s+1 total_days,

ORACLE时间函数

ORACLE时间函数: sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdate+5/24 在系统时间基础上延迟5小时 sysdate+5 在系统时间基础上延迟5天 add_months(sysdate,-5) 在系统时间基础上延迟5月 add_months(sysdate,-5*12) 在系统时间基础上延迟5年 上月末的日期: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(sysdate,'fmww') from dual 今天是本月的第几周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" 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即可。 select s,e,e-s+1 total_days, trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7

Oracle时间格式

1:取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YY ------------------- 20030327 4 18:16:09 SQL> select to_char(sysdate,'W') from dual; T - 4 2:取得当前日期是一个星期中的第几天,注意星期日是第一天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'

关于Oracle日期格式

Oracle关于日期时间 一.问题描述 我安装的数据库日期Date格式默认为’DD-M-YYYY(2-2月-1988)’,而数据库默认的格式一般都是’DD-MON-YYYY’,现在需要把日期格式改成数据库原本默认的格式 二.处理方式 修改注册表: 1.在注册表的KEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0 2.找到:NLS_LANG 如果这个不是’American’,要设置成英文(我原来安装的时候选的是简体中文,NLS_LANG的值是:SIMPLIFIED CHINESE_CHINA.ZHS16GBK) 3.新建一个字符串,命名为NLS_DA TE_FORMA T,然后值填上想要的默认格式,例如:YYYY-MM-DD HH24:MI:SS

4.第三方的工具显示的日期格式有时候和数据库默认的不通,工具里面的格式是受工具影响的,如果想要改变PLSQL Developer里面的日期显示格式,可以这样改: PL/SQL DEVELOPER需要在Tools->Preferences->User Interface->Date/Time下修改格式即 可: 如修改参数文件的话。可直接在参数文件中添加:

NLS_DATA_FORMAT=YYYY-MM-DD-HH24:MI:SS,但须将注册表中上述位置的NLS_LANG字串值去掉。 三.常用的命名 1.可以用下面的命令来修改一个会话的日期格式,断开与数据库的连接时,会话结束, 所有的修改都会丢失 alter session set nls_date_format='yyyy-mm-dd' 2. 查看日期格式命名:show parameter nls_date_format 3. 查看参数设置:select * from nls_session_parameters 4.求某天是星期几select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 5.求当前是星期几:select to_char(sysdate, 'day') from dual 6. 一年的第几天:select TO_CHAR(SYSDA TE,'DDD'),sysdate from dual 参考网址:https://www.wendangku.net/doc/1918854668.html,/397879213/archive/2010/12/29/341925.html https://www.wendangku.net/doc/1918854668.html,/gudufeiyang/article/details/5938885 2011年7月9日星期六 ___LiBo整理

Oracle中日期,时间查询

Oracle中日期,时间查询 在注册表\hkey_local_machine\software\oracle\home0主键中增加一个字串(8i版本),字串名为nls_date_format,字串的值为你希望定义的时间格式,如:yyyy-mm-dd hh24:mi:ss to_date('2007-08-25 19:31:00','yyyy-mm-dd hh24:mi;ss') 在oracle中处理日期大全 TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998 24小时格式下时间范围为: 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-Two 3. 求某天是星期几 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 设置日期语言

oracle日期时间类型

Oracle 数据类型及存储方式(三)日期时间类型——袁光东[转] 2009年10月18日星期日 16:57 第三部分日期时间类型 §3.1 DATE Date类型Oralce用于表示日期和时间的数据类型。固定占用7个字节。 包括七个属性: 世纪 世纪中的年份 月份 月份中的哪一天 小时 分 秒 SQL> create table test_date(col_date date); Table created SQL> insert into test_date values(to_date('2008-06-27 10:35:00','yyyy-mm-dd hh24:mi:ss')); 1 row inserted SQL> select to_char(col_date,'yyyy-mm-dd hh24:mi:ss'),dump(col_date) from test_date; TO_CHAR(COL_DATE,'YYYY-MM-DDHH DUMP(COL_DATE) ------------------------------ -------------------------------------------------------------------------------- 2008-06-27 10:35:00 Typ=12 Len=7: 120,108,6,27,11,36,1 Date类型的内部编码为12 长度:占用7个字节 数据存储的每一位到第七位分别为:世纪,年,月,日,时,分,秒。 世纪:采用”加100”表示法来存储。即世纪+100来存储。120 – 100 = 20 年:跟世纪一样采用”加100”表示法来存储。108 – 100 = 08(采用两位表示) 月:自然存储.6 日:自然存储,不做修改,27 时:(时,分,秒都采用“加1”法存储)11 -1= 10 分:36 -1 = 35 秒:1 -1 = 0 为什么世纪和年份要用加100法存储呢?是为了支持BC和AD日期。 BC即为公元前。 AD即为公元。 如果世纪– 100为一个负数,那么就是一个BC日期。

Oracle 中的日期格式转化

Oracle 中的TO_DATE 和TO_CHAR 函数日期处理 Oracle 中的 TO_DATE 和TO_CHAR函数 oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例 格式说明显示值备注 Year(年): yy two digits(两位年) 08 yyy three digits(三位年) 008 yyyy four digits(四位年) 2008 Month(月): mm number(两位月) 09 mon abbreviated(字符集表示) 9月若是英文版, 则显示 sep month spelled out(字符集表示) 9月若是英文版, 则显示 september Day(日): dd number(当月第几天) 10 ddd number(当年第几天) 254 dy abbreviated(当周第几天简写) 星期三若是英文版, 则显示 wed day spelled out(当周第几天全写) 星期三若是英文版, 则显示 wednesday ddspth spelled out, ordinal twelfth tenth Hour(时): hh two digits(12小时进制) 11 hh24 two digits(24小时进制) 23 Minute(分): mi two digits(60进制) 45 Second(秒): ss two digits(60进制) 56 其他: Q digit(季度) 3 WW digit(当年第几周) 37 W digit(当月第几周) 2 说明: 12小时格式下时间范围为: 1:00:00 - 12:59:59(12 小时制下的 12:59:59 对应 24 小时制下的 00:59:59) 24小时格式下时间范围为: 0:00:00 - 23:59:59 1. 日期和字符转换函数用法(to_date,to_char) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串

oracle中日期格式总结

oracle日期格式总结在oracle中处理日期大全 TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy four digits 1998 24小时格式下时间范围为: 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-Two 3. 求某天是星期几 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 table1 UNION select 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'

Oracle TO_DATE 日期格式大全

Oracle TO_DATE 日期格式大全 Oracle中TO_DATE格式2009-04-14 10:53TO_DATE格式(以时 间:2007-11-02 13:45:25为例) Year: yy two digits 两位年显示值:07 yyy three digits 三位年显示值:007 yyyy four digits 四位年显示值:2007 Month: mm number 两位月显示值:11 mon abbreviated 字符集表示显示值:11月,若是英文版,显示nov month spelled out 字符集表示显示值:11月,若是英文版,显示november Day: dd number 当月第几天显示值:02 ddd number 当年第几天显示值:02 dy abbreviated 当周第几天简写显示值:星期五,若是英文版,显示fri day spelled out 当周第几天全写显示值:星期五,若是英文版,显示friday ddspth spelled out, ordinal twelfth Hour: hh two digits 12小时进制显示值:01

hh24 two digits 24小时进制显示值:13 Minute: mi two digits 60进制显示值:45 Second: ss two digits 60进制显示值:25 其它 Q digit 季度显示值:4 WW digit 当年第几周显示值:44 W digit 当月第几周显示值:1 24小时格式下时间范围为: 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; //获取时间的月

oracle数据库中日期格式化

向oracle数据库中添加格式化的日期, 1.字符到日期操作,用到to_date SimpleDateFormatdateformate = new SimpleDateFormat("yyyy-MM-dd"); String createTime = "to_date('"+dateformate.format(new Date())+"','yyyy-mm-dd')"; 2.日期到字符操作,用到to_char selectsysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual selectsysdate,to_char(sysdate,’yyyy-mm-ddhh:mi:ss’) from dual selectsysdate,to_char(sysdate,’yyyy-dddhh:mi:ss’) from dual selectsysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual 3..日期格式参数含义说明 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 年中的第几个星期 1.日期时间间隔操作 当前时间减去7分钟的时间 selectsysdate,sysdate - interval ’7’ MINUTE from dual 当前时间减去7小时的时间 selectsysdate - interval ’7’ hour from dual 当前时间减去7天的时间 selectsysdate - interval ’7’ day from dual 当前时间减去7月的时间 selectsysdate,sysdate - interval ’7’ month from dual 当前时间减去7年的时间 selectsysdate,sysdate - interval ’7’ year from dual 时间间隔乘以一个数字 select sysdate,sysdate - 8 *interval ’2’ hour from dual

oracle日期处理

1. 关于获取系统日期:SYSDATE (1) (2) 2. TRUNC 函数 TRUNC for dates(日期) TRUNC函数返回以指定元素格式截去一部分的日期值。其具体的语法格式如下:TRUNC(date,[fmt])其中:date 为必要参数,是输入的一个日期值fmt 参数可忽略,是日期格式,用以指定的元素格式来截去输入的日期值。忽略它则由最近的日期截去下面是该函数的使用情况: TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am') ='24-Nov-1999 12:00:00 am' TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'),'hh') ='24-Nov-1999 08:00:00 am' trunc(sysdate,'yyyy') --返回当年第一天. trunc(sysdate,'mm') --返回当月第一天. trunc(sysdate,'d') --返回当前星期的第一天. trunc(sysdate,'d d') --返回当天.

2012-12-5测试: TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。其具体的语法格式如下TRUNC(number[,decimals])其中:number 待做截取处理的数值decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分。下面是该函数的使用情况:TRUNC(89.985,2)=89.98 TRUNC(89.985)=89 (即取整) TRUNC(89.985,-1)=80 注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。与取整类似,比如参数为1即取整到十分位,如果是-1,则是取整到十位,以此

AccessSQLServerOracle日期格式转成字符串函数应用大全

计算机审计中不同数据库日期型字段转换字符型函数应用大全 在计算机审计过程中,经常碰到不同数据类型之间转换,尤其是对日期型数据模糊查询时往往先将字段日期型转换字符型,笔者将ACCESS、SQL SERVER 2000 、ORACLE 等数据 库日期型转换字符型常用函数进行了罗列,以供大家参考。 一是ACCESS 数据库中日期型转换字符型使用函数Format() 。其语法:Format(expres sion [, format ] [, firstdayofweek ] [, firstweekofyear ] ),参数expression 必选,为任何有效的表达式; format 可选,有效的命名格式表达式,或用户定义的格式表达式;fir stdayofweek 可选,指定一周的第一天;firstweekofyear 可选,常量,指定一年的第一周。 语法如下: select 个人编号,姓名, sum( 金额) as 金额group by 个人编号,姓名where format( 参保时间, ' yyyymmdd ')between ‘ 20060430 'and ‘ 20070501 'order by sum( 金额) desc ,在AO2008 里面使用Format() 函数可以达到同样的效果。 二是SQL SERVER2000 数据库中日期型转换字符型。在SQL SERVER2000 数据库中有两组日期型转换字符型函数Cast()或convert() 。Cast()语法:CAST ( expression AS da ta_type[(length)]) 参数expression ,任何有效的表达式;data_type ,目标数据类型;le ngth,指定目标数据类型长度的可选整数。默认值30。 Convert ()语法:CONVERT(dat atype,expression[,format-style]) 参数datatype ,表达式将转换成的数据类型;expressi on ,要转换的表达式;format-style ,对于将字符串转换为日期或时间数据类型以及相反 的转换过程;format-style 是描述要使用的日期格式字符串的样式代码。实现上例使用nvert() 函co

oracle中的日期的各部分的常用的的写法

日期的各部分的常用的的写法取时间点的年份的写法: SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL; 取时间点的月份的写法: SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL; 取时间点的日的写法: SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL; 取时间点的时的写法: SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL; 取时间点的分的写法: SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL; 取时间点的秒的写法: SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL; 取时间点的日期的写法: SELECT TRUNC(SYSDATE) FROM DUAL; 取时间点的时间的写法: SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL; 日期,时间形态变为字符形态: SELECT TO_CHAR(SYSDATE) FROM DUAL; 将字符串转换成日期或时间形态: SELECT TO_DATE('2003/08/01') FROM DUAL; 返回参数的星期几的写法:

SELECT TO_CHAR(SYSDATE,'D') FROM DUAL; 返回参数一年中的第几天的写法: SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;返回午夜和参数中指定的时间值之间的秒数的写法:SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL;返回参数中一年的第几周的写法: SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL

Oracle的日期和时间详解

Oracle的日期和时间详解 Oracle 提供了三个用于存储日期/时间值的数据类型: 表示日期和时间的DATE 类型。DA TE 字段中存储的值包含有与世纪、年、月、日、小时、分钟和秒相对应的"组成部分"。 日期可以是公元前4712 年1 月1 日到公元9999 年12 月31 日这一范围中的任何一天。从Oracle9i开始提供的TIMESTAMP 类型是DA TE 类型的有效扩展格式,并且符合ANSI SQL 标准。它提供了更大的时间精度,支持多达九位的小数,同时还能够存储时区信息。从Oracle9i 开始提供的INTERV A类型,它支持存储时间差(如"两年零五个月"或"三天零十八个小时零四十五分钟"),并可以与DATE 或TIMESTAMP进行加法运算以生成一个新的DATE / TIMESTAMP 值。 本文主要介绍DA TE 类型,但适用于DATE 的大部分功能也适用于TIMESTAMP。(有关TIMESTAMP 和INTERV AL 类型的更多背景知识,请阅读Jonathan Gennick 在Oracle 杂志上发表的文章"Datetime Datatypes Add Precision"和"Finding the Time in Between"(这两篇文章均在2002 年11 月- 12 月刊中发表)。 Oracle 如何存储DATE。对于Oracle 中的DATE类型,首先要了解的是,它的内部表示形式使它可以通过不同的方法进行显示和操作。它有效地独立于任何特定的字符串格式。如果使用SELECT选择一个DATE 类型,Oracle 将自动把它转换为可读字符串,但这并不是值的实际存储方法。 使用SYSDATE 选择当前的系统时间,SYSDATE 返回DA TE 类型的值,是数据库所在的操作系统的当前日期和时间: SELECT SYSDATE FROM dual /* e.g. 25-JUL-05 */ 该格式受Oracle 参数NLS_DATE_FORMAT 的控制,可以根据每个会话进行更改(如下所示)。了解一下内部表示形式: SELECT DUMP(SYSDATE) FROM dual /* e.g. Typ=13 Len=8: 213,7,7,25,23,7,15,0 */ 结果中由逗号分隔的值对应于Oracle 存储日期和时间的每个部分(从世纪一直到秒)所使用的字节。 此处有一个重要问题值得注意:在比较DA TE 类型时,将比较DATE 的所有组成部分(一直比较到秒)。在某些情况下,您可能要根据不同的时间单位(如年、月或日)比较两个日期。这种情况下,可以使用TRUNC 这样的函数对所比较的两个DATE 的小时、分钟和秒部分进行向下取整。 有关更多详细信息,请参阅下面的"日期运算"。 如果您熟悉面向对象的编程,则也可将DATE 类型看作是对象。他们全都拥有属性(年、月、小时等)和行为,如: SELECT SYSDATE - 7 FROM dual /* e.g. 18-JUL-05 */ 该示例返回七天前的日期。其它的"行为"包括DATE 比较,这意味着您可以对日期执行SORT BY、GROUP BY以及查找界于两个日期之间的日期(BETWEEN) 等,还可以进行减法操作:从一个DA TE 中减去另一个DA TE以获得整数的日期差(在使用TIMESTAMP 时,将获得INTERV AL 类型)。 在DATE 类型和字符串之间进行转换。TO_DA TE() 和TO_CHAR() 函数用于在Oracle DA TE"对象"和使用者可理解的日期字符串之间进行转换。这两个函数均使用三个参数,一个要转换的值、一个可选的格式掩码和一个用于指定语言的可选字符串(例如,FRENCH)。 从概念上而言,格式掩码类似于正则表达式;您指定日期模式,该模式指示Oracle 如何将匹配的字符串与DATE 类型关联。Oracle数据库SQL 参考的"格式模型"中介绍了格式掩码。 使用TO_CHAR。以下是一个简单示例,它再次使用了SYSDA TE 函数: SELECT TO_CHAR( SYSDATE, 'YYYY-MM-DD HH24:MI:SS' ) FROM dual /* e.g. 2005-07-26 17:34:04 */ 详细了解一下该格式掩码,"YYYY"表示一个四位年份,"MM"表示一个两位月份,"DD"表示一个两位的月份中的日,"HH24"表示24小时制的小时,"MI"表示0 和59 之间的分钟,"SS"表示0 和59 之间的秒。注意,以下字符从格式掩码按原样传递到输出: / - , . ; : 其他字符串可以通过括在引号中进行"传递": SELECT TO_CHAR(SYSDATE, '"The time is now " HH24:MI:SS "precisely"') FROM dual

Oracle日期格式

Oracle时间格式讨论 在网上看见不少oracle新学者对oracle的时间格式很烦,经常是设计了一个带时间字段的表之后,向表插入数据失败。回想起自己刚开始学习oracle时,也对这个时间格式摸不着头脑,虽然是小小的问题,高手们不屑于讨论,但对初学者来讲,这也是一个不大不小的坎,没找到门路的话,可能几天都过不去,其实就是一层窗户纸,没什么难的。这里做一个简单的小结,因水平有限,请高手补充指正。 1 oracle对时间格式的数据存贮 oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清楚,请高手补充。存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位。因此在一些前台支持毫秒级的程序(如PB客户端程序)连接到oracle数据库时应注意这点。查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。 2 oracle时间显示形式 通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。例如,使用us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显示为:28-Jan-2003,而使用zhs16gbk字符集(或其他中文字符集)时时间格式缺省显示为:2003-1月-28。向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。查看当前会话的时间格式,可以使用以下的SQL语句: SQL> select sysdate from dual; 3 向oracle表中插入时间格式的数据 向oracle表插入时间格式的数据是一个相对来讲比较麻烦的事情,要么你严格遵从当前会话的时间格式书写你的时间值,要么使用转换函数自定义时间数据的格式。有两个与时间相关的转换函数: to_char 和 to_date。to_char(时间值,时间格式)函数将时间值转换为字符串形式,通常在查询中使用;to_date(字符串,时间格式)则把格式字符串转换时间值,通常在insert 语句中使用。在日期格式中,各种日期格式分量这里不作详细的讨论,请查oracle帮助文档中这两个函数的用法,或者查一查PL/SQL编程的书,讲得很详细的。 4 如何修改会话中的日期格式 修改当前会话中的日期格式据说有三种办法,我只做过前两种办法的试验,修改glogin.sql 文件的办法我没有试过,不知道是不是真的能行。下面一一解说。

相关文档