`
sdauying
  • 浏览: 5343 次
  • 性别: Icon_minigender_1
  • 来自: 泰安
社区版块
存档分类
最新评论

oracle 日期型

阅读更多
1、常用日期型数据类型
1.1、DATE
这是ORACLE最常用的日期类型,它可以保存日期和时间,常用日期处理都可以采用这种类型。DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日
date类型在数据库中的存储固定为7个字节,格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第4字节:天
第5字节:小时+1
第6字节:分+1
第7字节:秒+1

1.2、TIMESTAMP(p)
这也是ORACLE常用的日期类型,它与date的区别是不仅可以保存日期和时间,还能保存小数秒,小数位数可以指定为0-9,默认为6位,所以最高精度可以到ns(纳秒),数据库内部用7或者11个字节存储,如果精度为0,则用7字节存储,与date类型功能相同,如果精度大于0则用11字节存储。
格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第4字节:天
第5字节:小时+1
第6字节:分+1
第7字节:秒+1
第8-11字节:纳秒,采用4个字节存储,内部运算类型为整形

注:TIMESTAMP日期类型如果与数值进行加减运算会自动转换为DATE型,也就是说小数秒会自动去除。

1.3、DATE与TIMESTAMP类型内部存储验证
create table aa(c1 date,c2 timestamp(9));

insert into aa(c1,c2) values(
   date'2013-10-21',
   timestamp'2013-10-21 10:55:55.123456');
insert into aa(c1,c2) values(
   to_date('2013-10-21 10:55:55','YYYY-MM-DD HH24:MI:SS'),
   to_timestamp('2013-10-21 10:55:55.123456','YYYY-MM-DD HH24:MI:SS.FF6'));

select c1,dump(c1) c1_t,c2,dump(c2) c2_t from aa;


以下是为了测试是为了验证TIMESTAMP的小数位存储算法:
  select c2,dump(c2,16) c2_d16 from aa;

C2                                                            C2_D16
---------------------------------------- --------------------------------------------------------------------------------
21-10月-13 10.55.55.123456000 上午 Typ=180 Len=11: 78,71,a,15,b,38,38,7,5b,ca,0
21-10月-13 10.55.55.123456000 上午 Typ=180 Len=11: 78,71,a,15,b,38,38,7,5b,ca,0

    select to_number('0df46fcb','xxxxxxxx') mydata1,to_number('075bca00','xxxxxxxx') mydata2 from dual;

   MYDATA1         MYDATA2
----------      ----------
234123211    123456000

2、常见问题
2.1、如何取当前时间
sysdate--返回当前系统日期和时间,精确到秒
systimestamp--返回当前系统日期和时间,精确到毫秒
2.2、如何进行日期运算
日期型数据可以与数值加减得到新的日期,加减数值单位为天
sysdate+1--取明天的当前时间
sysdate-1/24--取当前时间的前一个小时
    select sysdate d1,sysdate+1 d2,sysdate-1/24 d3 from dual;

D1                       D2                       D3
------------------------ ------------------------ ------------------------
2013/10/21 11:17:43 2013/10/22 11:17:43 2013/10/21 10:17:43

2.3、如何求两个日期的间隔时间
可以直接把两个日期相减,返回的单位为天,小时及分秒会换算成小数
   select date'2012-01-01'-sysdate from dual;

DATE'2012-01-01'-SYSDATE
------------------------
        597.046030092593

2.4、如何将日期转字符
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')
2.5、如何将字符转日期
to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')
to_timestamp('1999-12-01 11:00:00.123456','YYYY-MM-DD HH:MI:SS.FF6')

3、常用日期函数
3.1、TO_CHAR(DATE,FORMATSTR)--格式化日期成字符
   select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') d1 from dual;

D1
------------------------
2010-05-13 22:56:38

TO_CHAR的其它用法示例
  SELECT TO_CHAR(date '2010-02-12', 'D') week_dayth,--周第几天(1-7),星期天=1,星期一=2,星期二=3,星期三=4,星期四=5,星期五=6,星期六=7
 TO_CHAR(date '2010-02-12', 'DD') month_dayth,--月第几天
 TO_CHAR(date '2010-02-12', 'DDD') year_dayth,--年第几天
 TO_CHAR(date '2010-02-12', 'DAY') weekdayname,--英文星期名
 TO_CHAR(date '2010-02-12', 'w') month_weekth,--月第几周(0-4)
 TO_CHAR(date '2010-02-12', 'ww') year_weekth--年第几周(0-53)
 FROM DUAL;

WEEK_DAYTH MONTH_DAYTH YEAR_DAYTH WEEKDAYNAME MONTH_WEEKTH YEAR_WEEKTH
---------- ----------- ---------- ----------- ------------ -----------
6          12          043        FRIDAY      2            07

3.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成日期
to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')
格式备注:
HH表示12小时进制,HH24表示采用24小时进制,MM表示月份,MI表示分钟。

3.3、TRUNC(DATE)--返回DATE的日期部分,时间为0点0分0秒
   select sysdate d1,trunc(sysdate) d2 from dual;

D1                       D2
------------------------ ------------------------
2010-5-13 下午 10:59:18  2010-5-13

3.4、EXTRACT(DATA FROM DATEVALUE)--返回DATE的某一部份内容
如果DATEVALUE为DATE类型,则DATA可以是(YEAR、MONTH、DAY)
如果DATEVALUE为TIMESTAMP类型,则DATA可以是(YEAR、MONTH,DAY、HOUR、MINUTE、SECOND)
   select sysdate d1,EXTRACT(YEAR FROM sysdate) thisyear,EXTRACT(MINUTE FROM systimestamp) thism from dual;

D1                         THISYEAR      THISM
------------------------ ---------- ----------
2010-5-13 下午 11:05:06        2010          5
3.5、ADD_MONTHS(DATE,MONTHS) --在DATE增加月份得到新日期

ADD_MONTHS(sysdate,3) --当前日期加3个月
ADD_MONTHS是一个比较有意思的函数,它会自动处理大小月及闰月,如下所示
  select ADD_MONTHS(date '2010-2-12', 1),
   ADD_MONTHS(date '2010-2-27', 1),
   ADD_MONTHS(date '2010-2-28', 1),
   ADD_MONTHS(date '2010-1-31', 1)
   from dual;

ADD_MONTHS(DATE'2010-2-12',1) ADD_MONTHS(DATE'2010-2-27',1) ADD_MONTHS(DATE'2010-2-28',1) ADD_MONTHS(DATE'2010-1-31',1)
----------------------------- ----------------------------- ----------------------------- -----------------------------
2010-3-12                     2010-3-27                     2010-3-31                     2010-2-28

3.6、LAST_DAY(DATE)--返回日期所在月份的最后一天日期
   select LAST_DAY(date '2010-2-12') from dual;

LAST_DAY(DATE'2010-2-12')
-------------------------
2010-2-28

3.7、NEXT_DAY(DATE,CHAR) --从给定日期开始返回下个CHAR指定星期的日期
   SELECT NEXT_DAY(date'2010-2-21', 'MONDAY') NEXTDAY1,NEXT_DAY(date'2010-2-22', 'MONDAY') NEXTDAY2 FROM DUAL;

NEXTDAY1    NEXTDAY2
----------- -----------
2010-2-22   2010-3-1

TO_YMINTERVAL(CHAR)--返回[年-月]格式构成的时间间隔,一般用于日期加减运算

3.8、TO_DSINTERVAL(CHAR)--返回[天 时:分:秒]格式构成的时间间隔,一般用于日期加减运算
   select date'2010-2-12'+TO_YMINTERVAL('01-02') newdate from dual;

NEWDATE
------------------------------
2011-4-12

3.9、NUMTOYMINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算
char可以为YEAR,MONTH
    select date '2010-2-12' + NUMTOYMINTERVAL(1, 'year') newdate1,
 date '2010-2-12' + NUMTOYMINTERVAL(1, 'month') newdate2
 from dual;

NEWDATE1    NEWDATE2
----------- -----------
2011-2-12   2010-3-12

3.10、NUMTODSINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算
char可以为DAY,HOUR,MINUTE,SECOND
    select date '2010-2-12' + NUMTODSINTERVAL(1, 'DAY') newdate1,
 date '2010-2-12' + NUMTODSINTERVAL(1, 'HOUR') newdate2
 from dual;

NEWDATE1    NEWDATE2
----------- ------------------------
2010-2-13   2010-2-12 上午 01:00:00
分享到:
评论

相关推荐

    Oracle日期型数据格式

    ### Oracle日期型数据格式 在Oracle数据库中,日期型数据是一种非常重要的数据类型,用于存储日期和时间信息。为了确保数据的一致性和可读性,Oracle提供了多种方式来定义和处理日期格式。本文将深入探讨Oracle中的...

    oracle日期类型的处理

    ### Oracle 日期类型处理 在Oracle数据库中,对日期类型的处理是十分常见的需求之一,尤其在数据查询、分析以及报表生成等场景下尤为重要。本文将详细介绍Oracle中与日期相关的两个重要函数:`to_date()` 和 `to_...

    Oracle日期类型处理

    ### Oracle日期类型处理知识点 #### 一、Oracle日期类型的存储与表示 在Oracle数据库中,日期类型被用来存储日期和时间信息。一个日期值包括年、月、日、时、分、秒等部分,并且Oracle默认以内部格式存储日期值,...

    Oracle日期时间类型

    ### Oracle日期时间类型详解 #### 一、概述 在Oracle数据库中,并不存在`datetime`这一数据类型,而是通过`date`类型来实现日期与时间的综合处理。`date`类型可以表示日期和时间,它固定占用7个字节的空间。本篇...

    oracle 日期类型查询汇总

    oracle 日期类型查询汇总

    Oracle日期函数练习

    Oracle 日期函数是 Oracle 数据库中的一组功能强大且广泛使用的函数,它们可以对日期进行各种操作和计算,本次练习涵盖了 Oracle 中常用的日期函数,包括获取当前系统时间、对日期的月进行加减、获取给定日期所在月...

    oracle_日期_加减方法

    - Oracle允许日期与数字直接相加减,这是因为日期类型可以隐式转换为天数,数字则被视为天数的倍数。 5. **日期之间的比较**: - 日期可以直接相减得到两个日期之间的天数差,例如`sysdate - sysdate`将返回0,...

    oracle日期处理全集

    以下是对给定文件中提及的Oracle日期处理函数的详细说明: 1. **add_months(d, n)**: 此函数将日期d加上n个月,返回新的日期。例如,`add_months(SYSDATE,1)`会返回当前日期往后一个月的日期。 2. **last_day(d)**...

    oracle日期处理完全版

    - `to_date` 函数用于将字符型数据转换为日期型,例如 `to_date('2002-08-26','yyyy-mm-dd')`。 - `to_char` 函数则用于将日期型数据转换为字符型,例如 `to_char(sysdate, 'day')` 可以显示当前日期的星期。 2. ...

    oracle日期时间判断函数

    针对标题"oracle日期时间判断函数"和描述中提到的内容,我们可以深入探讨两个关键的函数,它们主要用于判断字符串是否可以转换为合法的日期时间格式。 1. TO_DATE函数: TO_DATE是Oracle中用于将字符串转换为日期...

    oracle自定义日期函数

    Oracle 自定义日期函数 Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,...

    oracle日期操作举例

    此示例演示了如何将字符串形式的日期转换为日期类型。 #### 四、日期截断与四舍五入 有时我们需要截断或四舍五入日期到某个特定的时间单位,如年、月、日等。 **1. 截断日期到年** ```sql SELECT TRUNC(SYSDATE, ...

    oracle设置日期格式

    在开始之前,我们先来了解一些关于Oracle日期格式的基础知识: 1. **NLS_DATE_FORMAT**:这是一个非常重要的环境变量,用于控制日期在查询结果中的显示格式。 2. **日期格式字符串**:由一系列字符组成,用来定义...

    在oracle中处理日期大全

    TO_DATE 函数是 Oracle 中最常用的日期处理函数之一,它可以将字符串转换为日期类型。其基本语法为: `TO_DATE(string, format)` 其中,`string` 是要转换的字符串,`format` 是转换的格式。 例如: `SELECT TO_...

    Oracle中的日期类型的用法

    以下将详细介绍Oracle日期类型的格式、显示样式、转换方法以及如何修改当前会话的日期格式。 #### 1. Oracle日期格式概述 Oracle数据库中的日期格式由一系列字符组成,这些字符代表了不同的日期和时间元素。默认...

    Oracle 验证是否是日期

    2. **返回值类型**:`NUMBER`,返回1表示输入字符串可以被解析成有效日期,返回0表示无效。 3. **逻辑流程**: - **空值检查**:如果输入字符串为空,则直接返回0。 - **长度检查**:日期字符串应该为8位数字...

    Oracle时间日期操作

    Oracle 时间日期操作是 Oracle 数据库中的一种常用的操作类型,它可以对数据库中的日期和时间进行各种处理和计算。以下是 Oracle 时间日期操作的一些常见知识点: 1. 获取当前日期和时间:使用 `sysdate` 函数可以...

    oracle中日期类型与unix 时间戳的转换

    oracle中日期类型与unix 时间戳的转换, Unix时间戳记是从'1970-01-01 00:00:00'GMT开始的秒数,表现为整数型。 Oracle中的时间是Date型,以下函数提供了两种时间转换的Oracle函数 --unix时间戳与date时间互转 ...

    oracle 日期处理 总结

    以下是对Oracle日期处理的一些关键知识点的详细说明: 1. **将时间字符串转换为时间** Oracle提供了`to_date()`函数将字符串转换为日期类型。这个函数需要两个参数:要转换的字符串和匹配的转换格式。例如,`to_...

Global site tag (gtag.js) - Google Analytics