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

tzdcorbm  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(374)

我有一个名为reference的表,其中包含列time(timestamp),并调整存储varchar seconds值的值:10、13、55。。等
我想使用字段adjust来增加时间值,同时确保adjust值转换为秒而不是分钟或其他单位,例如:

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

怎么说呢?我尝试过使用interval,但它只适用于显式值,例如:

TIME + INTERVAL '13' SECOND AS END
thtygnil

thtygnil1#

你可以用 numToDSInterval() :

time + numToDSInterval(adjust, 'second')

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

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

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

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

gc0ot86w2#

秒应存储为 number ,为什么 varchar (或可能) varchar2 )?
除此之外,诀窍是获取一个间隔文字(这确实需要硬编码字符串)并对其使用算术运算。
那么,假设 time 以及 adjust 是你的专栏; time 是时间戳数据类型,并且 adjust 是数字,以秒为单位(如果它是字符串,您可以将它显式地转换为数字,方法是将它 Package 在 to_number() ; 我不说了,因为 adjust 应该是真的 number 以数据类型开头。)
然后你可以这样做:

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

在这里 adjust 可以是300,就像你在gmb的答案下给出的例子。

相关问题