2016-02-09 4 views
2

В Oracle 11g, я побежал следующий код первого:Как вставить время в таблицу sql?

alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'; 
create table table1(mytime timestamp); 

Затем я хотел бы добавить строку в моей таблице:

insert into table1(mytime) 
    values(TO_TIMESTAMP('2014-12-24 07:16:11')); 

Я также попытался без TO_TIMESTAMP:

insert into table1(mytime) 
    values('2014-12-24 07:16:11'); 

оба дали мне ту же ошибку:

--A * here: ...values('2014... 
--     * 
ORA-01843: not a valid month 

Почему?

ответ

0

Это должно было быть легко google-способным.

Но здесь вы идете:

insert into table1(mytime) 
values(TO_TIMESTAMP('2014-12-24 07:16:11', 'YYYY-MM-DD HH:MI:SS')); 
+0

Означает ли это, я не могу определить формат раз для всех? – tic30

+0

Да, это невозможно сделать раз для всех. Хотя другой вариант заключается в использовании [Timestamp litals] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#BABGIGCJ), указав время для 'fractional_seconds_precision'. Вот так: '' 2014-12-24 07: 16: 11.xxx'' –

1

TO_TIMESTAMP(string1 [, fmt ] ['nlsparam'])
The optional fmt specifies the format of char. If you omit fmt, then char must be in the default format of the TIMESTAMP datatype, which is determined by the NLS_TIMESTAMP_FORMAT initialization parameter.

Здесь вы можете увидеть, что это не nls_date_format но NLS_TIMESTAMP_FORMAT, что вы должны изменить.

Использование;

alter session set NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 

Тогда попробуйте ввести данные.

Примечание
Его всегда лучше использовать TO_DATE и TO_TIMESTAMP при правильном формате, как

TO_TIMESTAMP ('10-Sep-02 14:10:10.123000', 'DD-Mon-RR HH24:MI:SS.FF') 

Или вы можете использовать Date literals как

TIMESTAMP '1997-01-31 09:26:50.124' 
+0

Спасибо за ответ, но в моем случае nls_date_format работает нормально. Я уверен, что в какой-то момент ваше предложение будет необходимо. – tic30

Смежные вопросы