【问题标题】:SQL Trigger calculating difference for timestampsSQL触发器计算时间戳的差异
【发布时间】:2016-05-05 02:24:06
【问题描述】:

我似乎找不到计算时间差的解决方案,在插入两个时间戳时使用触发器自动在我的表中生成持续时间。

这是我的表'调用':

create table call(
    id varchar(5),
    start_time timestamp,
    end_time timestamp,
    duration INTERVAL DAY(3) TO SECOND (4),
    primary key(id));

我正在尝试使用触发器

create sequence time_diff;

CREATE OR REPLACE TRIGGER DURATION 
BEFORE INSERT ON call
for each row
BEGIN
begin select time_diff //confused and don't know what to do
END;

我希望像这样进行插入会起作用

insert into call values(111,'2015-04-21 15:42:23','2016-11-03 18:32:47',null);

我的时间戳格式是 'YYYY-MM-DD HH24:MI:SS';

【问题讨论】:

    标签: sql oracle triggers timestamp


    【解决方案1】:

    一些事情:首先,你为什么要存储一个计算出来的数字?违反正常形式。至少,让它成为一个虚拟列。其次,您不能输入那样的时间戳;使用正确的时间戳语法。 (如果您不知道它是什么,请在 Google 中输入“Oracle 时间戳文字”。)第三,您的问题是如何计算两个时间戳之间的差异(以秒为单位)?时间戳之间的差异是“间隔日到秒”;您可以从中提取日、小时、分钟和秒(分别),并将所有内容转换为秒。比如tsdiff := timestamp_1 - timestamp_2,然后是diff_seconds := extract (day from tsdiff) * 86400 + extract(hour from tsdiff) * 3600 + ...

    【讨论】:

    • 感谢您的指出!所以如果我要创建一个虚拟列,你的意思是类型应该是“间隔”吗?而且我不明白为什么我不能像那样输入时间戳。我可以将这种时间戳插入到我的另一个表中。
    • 对不起,实际上我收回了关于时间戳文字的内容。我错过了你帖子的最后一行;我猜你的意思是你的 NLS_TIMESTAMP_FORMAT 参数就是你显示的,然后你应该没问题。关于区别:类型可以是间隔天到秒(你可以谷歌找到完整的语法,包括精度) - 除非你真的需要它以秒表示。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多