Как я могу заменить дату в оракуле systimestamp

Я могу использовать только конкретное базовое значение (ГГГГММДД) в своем запросе.

Я хотел бы вставить данные с отметкой времени, но просто заменить на эту дату

INSERT INTO table (field1, field2, regTs)
 VALUES (:field1, :field2, systimestamp);

из этого запроса, как я могу применить:basedate + systimestamp час, минута, секунда, микросекунда

2 ответа

Сначала преобразуйте дату в строку, используя To_Char, и объедините строку времени со строкой даты, теперь вы можете использовать функцию To_Date для преобразования строки даты и времени в метку времени.

Пример:

to_date(to_char(BASEDATE, 'YYYY/MM/DD') || ' ' ||TO_CHAR(sysdate,'HH24:MI:SS.FF'), 'YYYY/MM/DD HH24:MI:SS.FF') 

Надеюсь это поможет.

Если вы знаете: basedate является константой для данного пользовательского опыта (выполнения задачи), то ваш первый шаг должен состоять в том, чтобы вычислить интервал между sysdate и: basedate. Выполните это один раз, чтобы выяснить это и минимизировать потребление ресурсов процессора позже:

select numtodsinterval(sysdate - :basedate, 'DAY') dsinterval
from dual;

Тогда вы можете заменить systimestamp в вашем тексте вставки с этим:

systimestamp - :dsinterval

Если: basedate изменяется довольно часто, то вам нужно добавить больше кода в выражение, например так:

systimestamp - numtodsinterval(sysdate - :basedate, 'DAY')

Очевидно, что в приведенных выше примерах тип данных для: basedate равен date. Если бы это был строковый тип данных, то вам пришлось бы обращаться к нему следующим образом, если строка даты отформатирована в соответствии с текущей настройкой NLS_DATE_FORMAT:

to_date(:basedate)

или это в зависимости от того, как строка даты была отформатирована:

to_date(:basedate, 'some date format string')
Другие вопросы по тегам