Дата не вставляется в оракула - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь вставить текущее время в oracleDB, но получаю ошибку.

"[Error: ORA-01830: date format picture ends before converting entire input string] errorNum: 1830, offset: 137"

текущее время

     var timestamp = new Date().toLocaleString();

значение метки времени: 21.12.2008, 2: 56: 13 PM

я хочу вставить время в этом формате 04-12-18 03: 49: 37.000000000 PM

мой запрос на вставку:

     var insertQuery = `insert into ` + global.get('appconfig').oracledbschema + `.` + global.get('appconfig').tableJOBSUMMARY + ` (JOBID,JOBSTARTTIME,LASTUPDATED,RECORDSPROCESSED,JOBTYPE) VALUES 
('` + currentJobID + `', TO_TIMESTAMP('` + timestamp + `', 'DD-MM-YY HH24:MI:SS.FF'),'','','`+jobtype +`')

1 Ответ

0 голосов
/ 21 декабря 2018

Редактировать: перечитывая вопрос, не ясно, какова точная маска ввода и формата преобразования.Если я пытаюсь

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 для выполнения работы с базой данных с использованием конкатенационных литералов.

...