在oracle 数据库中,默认SYSDATE 不存储时间吗?

时间:2021-01-25 15:37:45

标签: sql oracle

在 oracle 数据库中,我有一个表,其中有一列存储注册日期。对于该列,我使用 SYSDATE 作为默认值来自动存储注册的日期和时间。当我上次检查时,它存储了日期和时间,但是当我今天检查时,它返回“17-OCT-15 00:00:00”并且丢失了时间。 这是我使用的代码

select id, to_char(registration_date, 'DD-MON-yy HH24:MI:ss') from customer order by id

这是故障吗?谁能解释一下发生了什么?

1 个答案:

答案 0 :(得分:4)

通常最简单的解释就是正确的。

“默认”表示如果 insert 语句未指定注册日期的值,则将使用当时的 sysdate 值(而不是 NULL,这是“默认”默认)。

当插入该行时,完全有可能将注册日期明确指定为 17-OCT-(20)15,其中一天中的时间为 00:00:00。也有可能在插入时使用了默认的 sysdate,但随后有人出于某种原因更新了该行,并使用了时间为 00:00:00 的日期。

另一方面,如果您发现所有注册日期都有 00:00:00 时间,您需要检查表中是否有触发器,但也需要检查用于创建新行的过程。例如,新行可以通过一个过程(从您的用户那里获取输入)创建,并且该过程有一个 insert 语句,该语句确实为注册日期提供了一个明确的值 - 可能使用 to_date 和格式模型dd-MON-rr(因此,实际上,表中的默认值从未被使用)。

编辑:您在问题下方的评论中显示这是一个“练习”表。如果您使用 SELECT 语句针对另一个表创建或填充它(例如:create table t as select * from another_table),如果另一个表也有注册日期列,则不会使用您的默认值(当新表中的行生成时来自现有表中的行)。