没有时间存储日期是否使用更少的字节?

Blo*_*ked 2 oracle date oracle11g

我看到了这个链接,这个:

如果指定没有时间组件的日期值,则默认时间为午夜.如果指定没有日期的日期值,则默认日期是当前月份的第一天.

Oracle DATE列始终包含日期和时间的字段.如果查询使用的日期格式没有时间部分,则必须确保DATE列中的时间字段设置为午夜.

解决方案是使用日期数据类型对列进行约束,并TRUNC()在插入或更新表中的行时创建触发器(with ).

如果我使用这个解决方案,我是否有保证,Oracle确实为没有时间的日期存储更少的字节?

使用此标准日期时间类型Oracle会产生歧义.创建日期类型(仅包含日期)非常困难?这是我的观点(我来自MSSQL).

Ben*_*Ben 7

不,你没有任何保证......无论发生什么事,甲骨文都会存储它是午夜的事实.您无法在没有时间的情况下存储日期.

如果您创建下表:

create table a ( dt date);
insert into a values(sysdate);
insert into a values(trunc(sysdate));
Run Code Online (Sandbox Code Playgroud)

然后运行此查询:

select dt, dump(dt) from a
Run Code Online (Sandbox Code Playgroud)

SQL小提琴

返回的值是:

+-----------------------------+------------------------------------+
|             DT              |              DUMP(DT)              |
+-----------------------------+------------------------------------+
| June, 12 2013 18:03:15+0000 | Typ=12 Len=7: 120,113,6,12,19,4,16 |
| June, 12 2013 00:00:00+0000 | Typ=12 Len=7: 120,113,6,12,1,1,1   |
+-----------------------------+------------------------------------+

DUMP() 返回数据类型,字节长度和数据的内部表示.

换句话说,带有时间的日期和截断的日期都有7个字节.它们的长度相同.


稍微偏离一点,我建议不要破坏潜在有用的数据,因为你担心空间.