Редактировать: перечитывая вопрос, не ясно, какова точная маска ввода и формата преобразования.Если я пытаюсь
to_timestamp('12/21/2018, 2:56:13 PM', 'DD-MM-YY HH24:MI:SS.FF')
, я получаю
ORA-01843: not a valid month
, потому что нет месяца 21.
Если я пытаюсь использовать тот же формат с '04-12-18 03:49:37.000000000 PM'
(из «Я хочу вставить время в этом формате» ) Я получаю вашу ошибку ORA-01830
.
to_timestamp('04-12-18 03:49:37.000000000 PM', 'DD-MM-YY HH24:MI:SS.FF')
Если это то, что вы используете, то ошибка указывает на то, что форматмаска слишком коротка для строки, которую вы пытаетесь преобразовать.Для обработки 9 конечных цифр и индикатора AM / PM вам потребуется 'DD-MM-YY HH:MI:SS.FF9 PM'
(вы можете использовать либо AM
или PM
в маске формата).
Обратите внимание, что если строки включают AM /PM, вы не можете использовать HH24
как в вашем примере.
В случае, если неясно, to_timestamp()
принимает строку, такую как '12/21/2018, 2:56:13 PM'
, и создает Oracletimestamp
, который является нативным типом данных, таким как number
, varchar2
или date
.Он хранится во внутреннем двоичном формате и представляется только в удобочитаемом формате, когда это требуется для отображения.Если «Я хочу вставить время в этом формате» означает, что вы хотите связать определенный формат отображения с определенной переменной метки времени, то это невозможно.
Кроме того, все преобразованиеэтого можно избежать, если инфраструктура позволяет связывать переменную timestamp
(или date
) вместо создания SQL для выполнения работы с базой данных с использованием конкатенационных литералов.