当前位置: 首页 > 知识库问答 >
问题:

日期如何存储在Oracle中?

陈俊郎
2023-03-14

日期在Oracle中是如何存储的?例如,我知道大多数系统使用Epoch时间来确定它是什么时间。通过计算距离1970年1月1日有多少秒。Oracle也这样做吗?

我问这个问题的原因是我注意到,如果在Oracle中取两个日期,然后减去它们,就会得到一个浮点数,即两个日期之间的天数。

示例

(Sysdate - dateColumn)

将返回类似的内容(取决于时间)

3.32453703703703703703703703703703703704

现在,Oracle是在进行转换并输出该格式,还是在存储日期时,它离某个时间段有多少天?(如大纪元时间)

共有3个答案

宋昊然
2023-03-14

从手册http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#sthref151

对于每个日期值,Oracle存储以下信息:年、月、日、小时、分钟和秒

很明显,它没有存储历元值,这也得到了手册本章的确认:

数据库在内部将日期存储为数字。日期存储在每个7字节的固定长度字段中,对应于世纪、年、月、日、小时、分钟和秒

法兴德
2023-03-14

日期如何存储在Oracle中?

这两种数据类型有两个不同的用途。

  • 类型12-存储在表中的日期
  • 类型13-内部日期函数返回的日期,如SYSDATE/CURRENT_DATE,也可以在使用TO_DATE或ANSI Date litualDATE'YYYY-MM-DD'将字符串文字转换为日期时返回。

测试用例:

类型12的基本表设置:

SQL> CREATE TABLE t(col DATE);

Table created.

SQL> INSERT INTO t SELECT SYSDATE FROM dual;

1 row created.

SQL> COMMIT;

Commit complete.

检查不同的情况:

SQL> SELECT DUMP(col) FROM t;

DUMP(COL)
--------------------------------------------------------------------------------
Typ=12 Len=7: 120,116,3,17,18,6,55

SQL> SELECT DUMP(SYSDATE) FROM dual;

DUMP(SYSDATE)
--------------------------------------------------------------------------------
Typ=13 Len=8: 224,7,3,17,17,5,54,0

SQL> SELECT DUMP(CURRENT_DATE) FROM dual;

DUMP(CURRENT_DATE)
--------------------------------------------------------------------------------
Typ=13 Len=8: 224,7,3,17,17,14,20,0

SQL> SELECT DUMP(TO_DATE('17-DEC-1980 12:12:12','DD-MON-YYYY HH24:MI:SS'))  FROM dual;

DUMP(TO_DATE('17-DEC-198012:12:12','
------------------------------------
Typ=13 Len=8: 188,7,12,17,12,12,12,0

使用ANSI Date文字,就像使用\u Date:

SQL> SELECT DUMP(DATE '2016-03-17') FROM dual;

DUMP(DATE'2016-03-17')
--------------------------------
Typ=13 Len=8: 224,7,3,17,0,0,0,0

SQL> INSERT INTO t SELECT to_date('17-DEC-1980 12:13:14','DD-MON-YYYY HH24:MI:SS') FROM dual;

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT DUMP(col) FROM t;

DUMP(COL)
--------------------------------------------------------------------------------
Typ=12 Len=7: 120,116,3,17,18,6,55
Typ=12 Len=7: 119,180,12,17,13,14,15

SQL>

如您所见,在表中存储日期时,它使用类型12。第二种类型13用于使用日期函数将字符串文字转换为日期,或者由内部日期函数(如SYSDATE/CURRENT\u date)返回日期。

东门焕
2023-03-14

有两种类型12和13

http://oraclesniplets.tumblr.com/post/1179958393/my-oracle-support-oracle-database-69028-1

类型13

select dump(sysdate) from dual;
Typ=13 Len=8: 220,7,11,26,16,41,9,0

The format of the date datatype is

Byte 1 - Base 256 year modifier : 220
2      - Base 256 year : 256 * 7 = 1792 + 220 = 2012
3      - Month : 11
4      - Day : 26
5      - Hours : 16
6      - Minutes : 41
7      - Seconds : 09
8      - Unused

2012-11-26 16:41:09

类型12

select dump(begindate) from tab;
Typ=12 Len=7: 100,112,2,7,1,1,1

The format of the date datatype is

byte 1 - century (excess 100)  100 - 100 = 00
byte 2 - year (excess 100)  112 - 100 = 12
byte 3 - month = 2
byte 4 - day = 7
byte 5 - hour (excess 1) 1 - 1 = 0
byte 6 - minute (excess 1) 1 - 1 = 0
byte 7 - seconds (excess 1) 1 - 1 = 0

0012-02-07 00:00:00

 类似资料:
  • 这是我的Firebase结构 我想在每个用户的第二个名字下面的“预订”下存储一天中的日期和时间,然后选择一天中的日期和时间。 这是我到目前为止用错误的方法得到的结果。它在名为“MyBookings”的单独子节点下设置日期 基本上,我所做的是单击一个显示日期和时间选择器的EditText,我需要将该日期存储在Firebase实时数据库中。 这是我的Firebase参考,我知道它是错误的,但不知道如何

  • 我正在尝试执行从hibernate到oracle表的插入操作。我的存储过程是:-

  • 问题内容: 我想了解ES如何在其索引内部存储日期值。可以转换为UTC吗? 我有一个日期类型的字段“ t”。这是映射: 现在,当我向ES插入/添加文档时,它如何存储在索引中。 “ t”:“ 1427700477165”(从Date.now()函数生成的毫秒数)。ES是否在UTC中识别其时代时间并按原样存储? “ t”:“ 2015-03-29T23:59:59”(我会相应地调整映射日期格式)-ES如

  • 问题内容: 我想在Elasticsearch中添加一个日期时间字符串时遇到问题。 该文件如下: 该文档提出了一个错误 我知道我可以在Elasticsearch中使用日期格式,但是即使阅读网站上的文档,我也不知道如何使用。 和 错了。 如何在Elasticsearch中将datetime字符串转换为日期格式? 如何将datetime字符串直接存储到Elasticsearch中? 问题答案: 你快到了

  • 基于egg 封装公共上传类 配置上传路径 config.default.js // 上传文件类型限制 config.multipart = { fileExtensions: [ '.apk' ] // 增加对 apk 扩展名的文件支持 } // add your user config here const userConfig = { // 上传路径配置 upload_path: 'ap

  • 因此,我将这个名为的字段作为字符串存储在Mongodb中,格式为格式(例如'2012-12-21')。 现在我需要查询这个集合,以获取在给定时间间隔内的数据。 时间间隔是以一对字符串的形式给出的,它们以格式(例如'2015-12-21 16:00:00')表示开始时间和结束时间。 有没有什么方法可以直接在Mongo query中执行此操作,而不必将此任务带到我的javascript代码中?