Как я могу заменить дату в оракуле 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')