Если результат должен быть TIMESTAMP, есть несколько вариантов.Попробуйте выполнить следующее:
SELECT LOCALTIMESTAMP,
CAST(LOCALTIMESTAMP AS TIMESTAMP(0)) AS CAST_TIMESTAMP0,
CURRENT_DATE,
CAST(CURRENT_DATE AS TIMESTAMP) AS DATE_CAST_TO_TIMESTAMP,
TO_TIMESTAMP(TO_CHAR(LOCALTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') AS CHAR_TIMESTAMP,
CAST(TO_TIMESTAMP(TO_CHAR(LOCALTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'), 'DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP(0)) AS TRUCATED_TIMESTAMP
FROM DUAL
Обратите внимание, что значения CAST_TIMESTAMP0, CURRENT_DATE и DATE_CAST_TO_TIMESTAMP округляются до ближайшей секунды, а не усечены - перезапускайте запрос до тех пор, пока дробная часть LOCALTIMESTAMP не станет между 0,5 и 1,0чтобы увидеть это.Если округлые значения являются приемлемыми для вашего использования, вы можете пойти.Если нет, вам может понадобиться использовать две последние версии для преобразования метки времени в символьную строку и обратно.
Обратите также внимание, что приведенное выше значение CHAR_TIMESTAMP по-прежнему имеет количество дробных цифр по умолчанию, но все они равны нулю.Если вы не хотите этого, вам нужно использовать значение TRUNCATED_TIMESTAMP.
Поделиться и наслаждаться.