按数字增加D​​ate数据类型

时间:2014-07-24 16:55:54

标签: sql date sql-update

我正在尝试更新名为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);'

1 个答案:

答案 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