Oracleにタイムスタンプを挿入するにはどうすればよいですか?


91

その中にtimestampフィールドを持つOracle DBがあります。timestampこのフィールドにを挿入するための正しいSQLコードは何ですか?


9
「この情報はどこにも見つかりません。」オラクルのドキュメントは包括的でオンラインです。ここで見つけてください:download.oracle.com/docs/cd/B19306_01/server.102/b14200/toc.htm
APC

回答:


135
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
デイブ・コスタ

この単純なINSERTステートメントでは問題ではありませんが、通常、このようなバインド変数を使用することは望ましくありません。最初のステートメントの型変換により、バインドに依存することがなくなり、適切な計画を作成するOracleの機能が制限されます。values (:ts_val):ts_valがタイムスタンプに直接マップされると仮定して、代わりに使用した場合、オプティマイザはより適切に機能する可能性があります。
Jon Heller、

@JonHeller使用to_timestampすると、計画可能なSQLステートメントの実行計画がどのように悪化するかについて、具体的な例を示すことができますか?それができない方法の例を示すことができます。代わりに、私たち全員が避けたいと思うのは、予期された行ソース操作(つまり、最適な操作)の使用を妨げる予期しないデータ型強制です。
ジェフ・ホルト

@ jeff6times7 変換されていないバインド変数が変換されたバインド変数をどのように上回るかについては、この要旨を参照してください。違いはおそらく、データが歪んでいる場合にのみ重要です。ネイティブバインドタイプを使用すると、Oracleはデータをよりよく理解し、値に基づいてより適切な推定を行うことができます。
Jon Heller、

24
INSERT
INTO    mytable (timestamp_field)
VALUES  (CURRENT_TIMESTAMP)

CURRENT_TIMESTAMPおよびSYSTIMESTAMPは、この目的のためのOracleの予約語です。これらはのタイムスタンプに類似してい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型マッピングを理解する必要があります。


4

私はANSIタイムスタンプリテラルを好みます。

insert into the_table 
  (the_timestamp_column)
values 
  (timestamp '2017-10-12 21:22:23');

マニュアルの詳細:https : //docs.oracle.com/database/121/SQLRF/sql_elements003.htm#SQLRF51062


Oracle 11. TIMESTAMP(6)として定義されたフィールドはNULLではありません。使用し timestamp '2019-05-16 10:05:51:19:277401'てこのエラーがあります:ORA-01882:タイムゾーン地域が見つかりません
Alex 75

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.