Blo*_*ked 2 oracle date oracle11g
如果指定没有时间组件的日期值,则默认时间为午夜.如果指定没有日期的日期值,则默认日期是当前月份的第一天.
Oracle DATE列始终包含日期和时间的字段.如果查询使用的日期格式没有时间部分,则必须确保DATE列中的时间字段设置为午夜.
解决方案是使用日期数据类型对列进行约束,并TRUNC()在插入或更新表中的行时创建触发器(with ).
如果我使用这个解决方案,我是否有保证,Oracle确实为没有时间的日期存储更少的字节?
使用此标准日期时间类型Oracle会产生歧义.创建日期类型(仅包含日期)非常困难?这是我的观点(我来自MSSQL).
不,你没有任何保证......无论发生什么事,甲骨文都会存储它是午夜的事实.您无法在没有时间的情况下存储日期.
如果您创建下表:
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)
返回的值是:
+-----------------------------+------------------------------------+ | 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个字节.它们的长度相同.
稍微偏离一点,我建议不要破坏潜在有用的数据,因为你担心空间.