Oracle中的日期时间格式
Posted
技术标签:
【中文标题】Oracle中的日期时间格式【英文标题】:Date time format in Oracle 【发布时间】:2020-04-12 18:11:55 【问题描述】:我是 sql 新手,正在研究一个示例。在我创建的表中,我有 cmets 表:
CREATE TABLE comments (
club VARCHAR2(60) NOT NULL,
nick VARCHAR2(35),
msg_date DATE,
title VARCHAR2(100) NOT NULL,
director VARCHAR2(50) NOT NULL,
subject VARCHAR2(100),
message VARCHAR2(1500),
valoration NUMBER(2),
CONSTRAINT PK_COMMENTS PRIMARY KEY (nick,msg_date),
CONSTRAINT FK_COMMENTS_MEMBER FOREIGN KEY (nick,club) REFERENCES membership ON DELETE CASCADE,
CONSTRAINT FK_COMMENTS_MOVIES FOREIGN KEY (title,director) REFERENCES movies,
CONSTRAINT CK_COMMENTS_VAL CHECK (valoration<11)
);
我被要求创建一个执行以下操作的触发器: 如果评论与已存储的另一评论在同一日期到达,请使用日期注册 '一秒钟后'。 我遇到的问题是我不知道如何将“一秒”转换为日期。关于如何解决这个问题的任何想法?
【问题讨论】:
【参考方案1】:msg_date + 间隔'1'秒
或者 msg_date + (1/(24*60*60))
然而,这整个场景充满了危险。在触发器中检查表中的现有消息时,该表可能在其他事务中发生变化,因此这里存在竞争条件的真正风险 - 两条消息都将现有消息增加 1 秒,然后将具有相同的日期。无论检查是在触发器还是应用程序代码中,情况都是如此。
如果这是一个真实世界的场景,我会避免触发,使用时间戳而不是日期,其精度介于毫秒和纳秒之间,并考虑如何处理与业务问题具有相同时间戳的消息的较低风险- 如果真的发生了会有什么影响。
【讨论】:
问题是DATE格式是'DD/MM/YYYY' 作为 varchar2?您可以转换为日期,但如果您只有最近一天的日期,那么我会认为添加 1 秒毫无意义? 但是我可以在表格定义中看到它是一个日期,并且日期类型存储到最接近的秒。 docs.oracle.com/cd/B28359_01/server.111/b28318/… 另见***.com/q/8707556/2568649,您可能需要找到 max(msg_date) + interval '1' second where trunc(msg_date) = trunc(new:msg_date)以上是关于Oracle中的日期时间格式的主要内容,如果未能解决你的问题,请参考以下文章
Oracle DB 中的日期时间格式不正确,转换为小时和分钟
将一年中的某一天转换为某些日期格式具有 DDYYYY 并且某些日期格式具有 DDDYYYY 在 oracle 中的日期