oracle中日期的类型有哪些

author author     2023-03-27     229

关键词:

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类型内部存储验证

1 create table T
2 (
3 C1 DATE,
4 C2 TIMESTAMP(9)
5 );
6
7 insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211');
8 insert into t(c1,c2) values(
9 to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),
10 to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')
11 );
12
13 SQL> select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;

C1 C1_D C2 C2_D
------------------------ ---------------------------------------- ---------------------------------------- -----------------------------------------------------
2010-2-12 Typ=12 Len=7: 120,110,2,12,1,1,1 12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11: 120,110,2,12,14,25,53,13,244,111,203
2010-2-12 上午 10:20:30 Typ=12 Len=7: 120,110,2,12,11,21,31 12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11: 120,110,2,12,14,25,53,7,91,202,0
以下是为了测试是为了验证TIMESTAMP的小数位存储算法:
1 SQL> select c2,dump(c2,16) c2_d16 from t;

C2 C2_D16
---------------------------------------- --------------------------------------------------------------------------------
12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,d,f4,6f,cb
12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,7,5b,ca,0
SQL> 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--取当前时间的前一个小时
SQL> select sysdate d1,sysdate+1 d2,sysdate-1/24 d3 from dual;

D1 D2 D3
------------------------ ------------------------ ------------------------
2010-5-13 下午 10:55:16 2010-5-14 下午 10:55:16 2010-5-13 下午 09:55:16
2.3、如何求两个日期的间隔时间
可以直接把两个日期相减,返回的单位为天,小时及分秒会换算成小数
SQL> 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)--格式化日期成字符
SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') d1 from dual;

D1
------------------------
2010-05-13 22:56:38
TO_CHAR的其它用法示例

1 SQL> SELECT TO_CHAR(date '2010-02-12', 'D') week_dayth,--周第几天(1-7),星期天=1,星期一=2,星期二=3,星期三=4,星期四=5,星期五=6,星期六=7
2 TO_CHAR(date '2010-02-12', 'DD') month_dayth,--月第几天
3 TO_CHAR(date '2010-02-12', 'DDD') year_dayth,--年第几天
4 TO_CHAR(date '2010-02-12', 'DAY') weekdayname,--英文星期名
5 _CHAR(date '2010-02-12', 'w') month_weekth,--月第几周(0-4)
6 TO_CHAR(date '2010-02-12', 'ww') year_weekth--年第几周(0-53)
7 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秒
SQL> 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)
SQL> 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是一个比较有意思的函数,它会自动处理大小月及闰月,如下所示
1 SQL> select ADD_MONTHS(date '2010-2-12', 1),
2 ADD_MONTHS(date '2010-2-27', 1),
3 ADD_MONTHS(date '2010-2-28', 1),
4 ADD_MONTHS(date '2010-1-31', 1)
5 from dual
6 ;

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)--返回日期所在月份的最后一天日期
SQL> 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指定星期的日期
SQL> 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)--返回[天 时:分:秒]格式构成的时间间隔,一般用于日期加减运算
SQL> 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
1 SQL> select date '2010-2-12' + NUMTOYMINTERVAL(1, 'year') newdate1,
2 date '2010-2-12' + NUMTOYMINTERVAL(1, 'month') newdate2
3 from dual;

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

NEWDATE1 NEWDATE2
----------- ------------------------
2010-2-13 2010-2-12 上午 01:00:00
参考技术A DATE
包含 世纪、年、月、日、时、分、秒。
占用7个字节,上面每个部分1个字节

TIMESTAMP 日期时间 可以包含到小数秒
TIMESTAMP WITH TIME ZONE 包含时区信息
TIMESTAMP WITH LOCAL TIME ZONE包含时区信息,自动调整
参考技术B

有以下几种:

    DATE,包含 世纪、年、月、日、时、分、秒。占用7个字节,上面每个部分1个字节。

    TIMESTAMP 日期时间 可以包含到小数秒。

    TIMESTAMP WITH TIME ZONE 包含时区信息。

    TIMESTAMP WITH LOCAL TIME ZONE包含时区信息,自动调整。

拓展回答:

Oracle Database,又名Oracle RDBMS,或简称Oracle。

是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。

它由至少一个表空间和数据库模式对象组成。这里,模式是对象的集合,而模式对象是直接引用数据库数据的逻辑结构。模式对象包括这样一些结构:表、视图、序列、存储过程、同义词、索引、簇和数据库链等。逻辑存储结构包括表空间、段和范围,用于描述怎样使用数据库的物理空间。

总之,逻辑结构由逻辑存储结构(表空间,段,范围,块)和逻辑数据结构(表、视图、序列、存储过程、同义词、索引、簇和数据库链等)组成,而其中的模式对象(逻辑数据结构)和关系形成了数据库的关系设计。

参考技术C Oracle查询日期可以使用=
但是在等号的两边必须数据类型一致,比如'2010-9-19'这是一个字符串不能直接与日期类型字段比较
必须要进行日期转换:
1、日期转换成字符串 to_char(date,'yyyy-mm-dd')='2009-09-19'
2、字符串转成日期 to_date('2009-9-19','yyyy-mm-dd')=trunc(date)

日期本身可能会带时分秒,需要注意
参考技术D 实际上真正的日期只有2种,一种是通常的Date,还有一种是DateTime,看你要的精度了。一般用DateTime就好了.本回答被提问者和网友采纳

oracle中都有哪些数据类型

Oracle中的数据类型有:字符型、数字型、日期型等。具体介绍如下:1、字符型:char(n):用于标识固定长度的字符串。  当实际数据不足定义长度时,使用空格补全右边不足位。varchar(n):可变字符串类型。  为SQL标准规定的,... 查看详情

如何在 oracle 触发器中转换日期类型变量的时区

】如何在oracle触发器中转换日期类型变量的时区【英文标题】:Howtoconverttimezoneofdatetypevariableinoracletrigger【发布时间】:2020-08-3115:55:45【问题描述】:如果我有日期类型变量date_timedate:=sysdate;--SupposethetimezoneisEST.现在,如何将变量... 查看详情

mysql和oracle的日期转换到底有哪些不同?我们来比较一下

  1.MySql和Oracle的日期转换  mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE。  oracle>selectto_char(sysdate,‘yyyy-mm-dd‘)fromdual;  oracle>selectto_char(sysdate,‘hh24-mi-ss‘)fromdual;  mysql>selectdate_f 查看详情

mysql的timestamp数据类型

我们可能经常用数据库中的日期和时间类型,但他能存什么精度的,有什么坑,能怎么使用,其实还是很讲究的。Oracle数据库关于日期类型的历史文章,《Oracle时间戳类型内部表示的转换方式》《时间戳相减... 查看详情

mysql的timestamp数据类型

我们可能经常用数据库中的日期和时间类型,但他能存什么精度的,有什么坑,能怎么使用,其实还是很讲究的。Oracle数据库关于日期类型的历史文章,《Oracle时间戳类型内部表示的转换方式》《时间戳相减... 查看详情

在oracle11g系统中约束的类型都有哪些

...,不用看这篇文章了。ORACLE的约束有啥功能作用?有哪些类型约束(不同版本ORACLE是否不同)?视图有约束吗?约束是否会影响SQL性能?约束信息存储在哪些系统视图、数据字典中?约束能否修改名称?能否禁用约束?延迟约束... 查看详情

数据库表中字段类型都有哪些?

...xt 3、Unicode数据类型包括Nchar,Nvarchar和Ntext  4、日期和时间数据类型包括Datetime,Smalldatetime,Date,TimeStamp5、数字数据类型 数字数据类型包括正数和负数、小数和整数  6、货币数据类型表示正的或者负的货币数量... 查看详情

sql数据类型都有哪些

...e数据类型占用的空间是使用非Unicode数据类型的两倍。4、日期和时间数据类型。日期和时间数据类型包括Datetime和Smalldatetime两种类型。日期和时间数据类型由有效 查看详情

在sql-server中关于日期的数据类型都有哪些?

正在做项目,在数据库设计时,有一个字段,需要用到日期(只要年、月、日),用了Datetime和Smalldatetime都试过,但是我只需要日期,不要带时间,因此,我试用两种数据类型时借助check和default约束以及year、month、day函数,结果... 查看详情

oracle的常用函数都有哪些

常用的看你使用程度了\x0d\x0a\x0d\x0a常用的有日期处理函数(month_between,add_months,next_day,extract...)\x0d\x0a转换函数(to_number,to_char,to_date)\x0d\x0a字符处理函数(substr,replace,trim,upper,lower,concat,instr...)\x0d\x0a数学... 查看详情

oracle中如何修改日期类型的字段值

参考技术A1、打开oracle数据库新建一张表,因为是设置日期格式,因此字段2个date_time和time_time都是日期类型,如图:2、如果是简单的查询表,那是显示的如期还是日期格式,如图:3、查询日期显示结果设置日期格式,可以使用o... 查看详情

C#bond 中都有哪些可用的数据类型?

...什么?字符串名字字符串姓氏字符串电子邮件bool已注册日期时间日期加入字符性别列表收藏夹字符串城市字符串状态unit16邮编字符串国家列表FrequentP 查看详情

oracle中如何修改日期类型的字段值

...:00:00','yyyy-mm-ddhh:mi:ss');解释:修改tablename表中的日期字段的时间值为”2015-05-0420:00:00“,to_date函数中第一个字段是要转化的值,第二个字段是日期的类型,这两个值必须保持格式一致。 查看详情

oracle中的timestamp对应sqlserver2005中哪个数据类型

...时、分、秒。占用7个字节,上面每个部分1个字节TIMESTAMP日期时间可以包含到小数秒TIMESTAMPWITHTIMEZONE包含时区信息TIMESTAMPWITHLOCALTIMEZONE包含时区信息,自动调整SQLServer的Transact-SQL包含两种数据类型:smalldatetime占用4字节,范围1900-1... 查看详情

oracle中的日期类型不包括时间值

】oracle中的日期类型不包括时间值【英文标题】:Datetypeinoracledoesnotincludetimevalues【发布时间】:2011-02-0602:39:10【问题描述】:我有一个使用OracleXE数据库的PHP应用程序。每当我添加日期时,小时、分钟和秒似乎都会被忽略。是否... 查看详情

在 .NET 中使用哪些好的倒排索引库?

...约有100000个项目,包含10个字段。字段的类型是字符串、日期时间、int、float和自定义项类型。可以有大约5个并发数据集,但搜索只在一个数据集内。搜索类型 查看详情

提要中都有哪些类型的帖子?

】提要中都有哪些类型的帖子?【英文标题】:Whattypesofpostsareinafeed?提要中有哪些类型的帖子?【发布时间】:2011-11-1204:15:22【问题描述】:我想知道我可以在提要中期待哪些所有可能类型的帖子。http://developers.facebook.com/docs/ref... 查看详情

oracle数据库锁的常用类型都有哪些

...库锁机制的详细研究首先我们要介绍的是Oracle数据库锁的类型同时也阐述在实际应用中我们经常会遇到的与锁相关的异常情况特别对经常遇到的由于等待锁而使事务被挂起的问题进行了定位及解决并对死锁这一比较严重的现象提... 查看详情