Как использовать значение столбца в качестве интервала для увеличения даты в Oracle SQL? - PullRequest
2 голосов
/ 26 мая 2020

У меня есть таблица с именем REFERENCE со столбцами TIME (отметка времени) и ADJUST , в которой хранятся значения секунд varchar : 10, 13, 55, .. et c

Я хочу использовать поле ADJUST, чтобы увеличить значение TIME, при этом убедившись, что значения ADJUST преобразуются в секунды, а не в минуты или другие единицы, например:

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

Как это сделать? Я пробовал использовать интервал, но он работает только с явными значениями, например:

TIME + INTERVAL '13' SECOND AS END

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Вы можете использовать numToDSInterval():

time + numToDSInterval(adjust, 'second')

Было бы проще явно преобразовать строку в число:

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

Если adjust всегда принадлежит диапазону 00-59, можно также использовать to_dsinterval():

time + to_dsinterval('0 00:00:' || adjust)
1 голос
/ 26 мая 2020

Секунды должны храниться как number, почему они varchar (или, вероятно, varchar2)?

Помимо этого, хитрость заключается в том, чтобы взять литерал интервала (что действительно требует жесткого -кодированная строка) и используйте над ней арифметические операции c.

Итак, допустим, time и adjust - ваши столбцы; time - это тип данных timestamp, а adjust - число, измеряемое в секундах. (Если это строка, вы можете явно преобразовать ее в число, заключив ее в to_number(); я оставлю это, поскольку adjust действительно должно быть типом данных number для начала.)

Затем вы можете сделать что-то вроде этого:

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

Здесь adjust может быть 300, как в примере, который вы дали в ответе GMB.

...