我正在尝试更新名为scheddate
的列,这是一个Date
数据类型,基于另一列transleadtime
的值。
transleadtime
将分钟数保存为Number
数据类型。
将分钟添加到日期变量的最佳方法是什么?这是我到目前为止所尝试的:
'UPDATE scpomgr.schedrcpts sr
SET sr.scheddate = (SELECT sr.scheddate + MAX(n.transleadtime / 1440)
FROM scpomgr.network n
WHERE n.source = sr.loc);'
答案 0 :(得分:0)
您可以尝试在此处使用dateadd功能。此函数采用特定值,并将其添加到指定日期。您可以添加天,年,分钟,小时等。在您的情况下,您想要添加分钟,并且由于您要添加到现有的scheddate,您将使用它作为参数。
这是语法的样子:
UPDATE scpomgr.schedrcpts sr
SET sr.scheddate = dateadd(
minute,
(SELECT n.transleadtime FROM scpomgr.network n WHERE n.source = sr.loc),
(SELECT sr.scheddate)
);
这会将分钟(由第一个参数指定)添加到sr.scheddate(由第三个参数指定)。将添加的分钟是n.translead时间(由第二个参数指定)。
现在,这假设选择sr.scheddate并选择你拥有的n.transleadtime只会返回1个值。如果他们返回更多,您可能需要调整where语句或限制结果集。
我也取出了NVL功能,但如果你想防止空值,我会将它们放在第二个和/或第三个参数中。绝对在第二个,但如果您的scheddate列不接受空值,那么您将不需要它。
UPDATE scpomgr.schedrcpts sr
SET sr.scheddate = dateadd(
minute,
NVL((SELECT n.transleadtime FROM scpomgr.network n WHERE n.source = sr.loc), 0),
(SELECT sr.scheddate)
);
我目前无法对此进行测试,因此可能需要进行一些调整,但从那里开始,让我知道如何改进它。
修改强>
如果你正在寻找最高的transleadtime,我认为MAX函数是最简单的方法。尝试将第二个参数中的子查询调整为:
SELECT MAX(n.transleadtime) FROM scpomgr.network n WHERE n.source = sr.loc