如何使用列值作为间隔来增加 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
)?
除此之外,诀窍是采用区间文字(确实需要硬编码字符串)并对其进行算术运算。
所以,假设 time
和 adjust
是您的列; time
是时间戳数据类型,adjust
是数字,以秒为单位。 (如果它是字符串,您可以通过将其包装在 to_number()
中显式地将其转换为数字;我将忽略它,因为 adjust
确实应该是 number
数据类型。 )
那么你可以这样做:
..... time + adjust * interval '1' second.
这里adjust
可以是300,如你在GMB的回答下给出的例子
我有 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
)?
除此之外,诀窍是采用区间文字(确实需要硬编码字符串)并对其进行算术运算。
所以,假设 time
和 adjust
是您的列; time
是时间戳数据类型,adjust
是数字,以秒为单位。 (如果它是字符串,您可以通过将其包装在 to_number()
中显式地将其转换为数字;我将忽略它,因为 adjust
确实应该是 number
数据类型。 )
那么你可以这样做:
..... time + adjust * interval '1' second.
这里adjust
可以是300,如你在GMB的回答下给出的例子