如何使用列值作为间隔来增加 Oracle SQL 中的日期?

How to use Column value as Interval to increase date in Oracle SQL?

我有 table 名为 REFERENCE 的列 TIME(时间戳),ADJUST 存储 varchar 秒值 : 10 , 13, 55, .. 等等

我想使用字段 ADJUST 来增加 TIME 的值,同时确保将 ADJUST 值转换为秒而不是分钟或其他单位,例如:

SELECT 
TIME AS START,
TIME + ADJUST AS END
FROM REFERENCE;

怎么办? 我试过使用间隔,但它只适用于显式值,例如:

TIME + INTERVAL '13' SECOND AS END

您可以使用 numToDSInterval():

time + numToDSInterval(adjust, 'second')

将字符串显式转换为数字可能更简洁:

time + numToDSInterval(to_number(adjust), 'second')

如果adjust总是属于范围00-59,你也可以使用to_dsinterval():

time + to_dsinterval('0 00:00:' || adjust)

秒应该存储为 number,为什么它们是 varchar(或者可能是 varchar2)?

除此之外,诀窍是采用区间文字(确实需要硬编码字符串)并对其进行算术运算。

所以,假设 timeadjust 是您的列; time是时间戳数据类型,adjust是数字,以秒为单位。 (如果它是字符串,您可以通过将其包装在 to_number() 中显式地将其转换为数字;我将忽略它,因为 adjust 确实应该是 number 数据类型。 )

那么你可以这样做:

.....  time + adjust * interval '1' second.

这里adjust可以是300,如你在GMB的回答下给出的例子