Oracle에 타임 스탬프를 삽입하는 방법은 무엇입니까?


답변:


139
insert
into tablename (timestamp_value)
values (TO_TIMESTAMP(:ts_val, 'YYYY-MM-DD HH24:MI:SS'));

현재 타임 스탬프를 삽입하려면 다음을 수행하십시오.

insert
into tablename (timestamp_value)
values (CURRENT_TIMESTAMP);

1
TO_DATE대신 왜 TO_TIMESTAMP?
Dave Costa

이 간단한 INSERT문에서는 중요하지 않지만 일반적으로 이와 같은 바인드 변수를 사용하고 싶지 않습니다. 첫 번째 명령문의 유형 변환은 바인드에 민감하지 않게하여 Oracle이 좋은 계획을 작성하는 능력을 제한합니다. values (:ts_val)대신 사용하면 최적화 프로그램이 더 잘 작동 할 수 있습니다 . : ts_val이 타임 스탬프에 직접 매핑된다고 가정합니다.
Jon Heller

@JonHeller 사용 to_timestamp하면 계획 가능한 SQL 문에 대해 잘못된 실행 계획이 발생 하는 구체적인 예를 보여줄 수 있습니까 ? 나는 그것이 어떻게되지 않을지에 대한 예를 보여줄 수 있습니다. 대신, 우리 모두가 피하고 싶은 것은 예상되는 행 소스 작업 (즉, 최적의 작업)을 사용하지 못하게하는 예기치 않은 데이터 유형 강제 변환입니다.
Jeff Holt

@ jeff6times7 변환되지 않은 바인드 변수가 변환 된 바인드 변수를 능가하는 방법에 대한 설명은 이 요점 을 참조하십시오 . 차이는 데이터가 왜곡 된 경우에만 중요합니다. 기본 바인드 유형을 사용하면 Oracle은 데이터를 더 잘 이해하고 값을 기반으로 더 나은 추정을 할 수 있습니다.
Jon Heller

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMP그리고 SYSTIMESTAMP오라클이 목적을 위해 예약 된 단어. 그것들은의 타임 스탬프 아날로그입니다 SYSDATE.


19
INSERT INTO TABLE_NAME (TIMESTAMP_VALUE) VALUES (TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));

9

종류는 삽입하려는 값의 출처에 따라 다릅니다. 현재 시간을 삽입하려면 CURRENT_TIMESTAMP다른 답변과 같이 사용할 수 있습니다.SYSTIMESTAMP ) .

시간이 문자열로 있고이를 타임 스탬프로 변환하려면 다음과 같은 표현식을 사용하십시오.

to_timestamp(:timestamp_as_string,'MM/DD/YYYY HH24:MI:SS.FF3')

시간 형식 구성 요소는 설명이 필요하지 않습니다. FF3 3 자리 이하의 정밀도 의미 것을 합니다. 6 자리의 정밀도까지 올릴 수 있습니다.

응용 프로그램에서 삽입하는 경우 가장 좋은 답변은 날짜 / 시간 값이 사용자 언어로 저장되는 방식에 따라 달라질 수 있습니다. 예를 들어 특정 Java 객체를 TIMESTAMP열에 직접 매핑 할 수 있지만 JDBC유형 매핑 을 이해해야 합니다.



1

SQL에 날짜 삽입

insert
into tablename (timestamp_value)
values ('dd-mm-yyyy hh-mm-ss AM');

시스템 날짜를 삽입하고 싶다면

insert
into tablename (timestamp_value)
values (sysdate);

0

먼저 필드를 Nullable로 설정해야합니다. 그런 다음 값을 넣는 대신이 코드를 넣어야합니다 CURRENT_TIMESTAMP.


0

내 자신의 미래 참조 :

cx_Oracle 사용 cursor.setinputsize (...) :

mycursor = connection.cursor();

mycursor.setinputsize( mytimestamp=cx_Oracle.TIMESTAMP );
params = { 'mytimestamp': timestampVar };
cusrsor.execute("INSERT INTO mytable (timestamp_field9 VALUES(:mytimestamp)", params);

db에서 변환이 필요하지 않습니다. Oracle 문서 참조


0

하나는 단순히 사용할 수 있습니다

INSERT INTO MY_TABLE(MY_TIMESTAMP_FIELD)
VALUES (TIMESTAMP '2019-02-15 13:22:11.871+02:00');

이렇게하면 날짜 형식 문자열에 대해 걱정할 필요가 없으며 기본 타임 스탬프 형식 만 사용하면됩니다.

Oracle 11에서 작동하며 이전 Oracle 버전에서도 작동하는지 알 수 없습니다.


-6
CREATE TABLE Table1 (
id int identity(1, 1) NOT NULL,
Somecolmn varchar (5),
LastChanged [timestamp] NOT NULL)

이것은 mssql 2012에서 작동합니다.

INSERT INTO Table1 VALUES('hello',DEFAULT)  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.