2016-06-21 14 views
1

小数点以下1桁に秒で特定の形式で現在のタイムスタンプを取得します:私は次のようなOracleデータベースに値を設定しようとしている

2016-06-21 03:07:25.0 

それは一桁と現在の日付のvarchar型であります秒の10進数の後。そして、私が試した

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS.F'; 
ERROR: 
ORA-01821: date format not recognized 

SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS.s'; 
ERROR: 
ORA-01821: date format not recognized 

SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM dual; 

TO_CHAR(SYSDATE,'YY 
------------------- 
2016-06-21 12:58:55 

それは私が秒まで働いていたので、私が試したこのことから

SQL> select sysdate from dual; 

SYSDATE 
-------- 
21-06-16 

:私は無駄にこれを達成するための複数の方法を試してみました小数部を試しました:

SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS.SSSS') from dual; 

TO_CHAR(SYSDATE,'YYYY-MM 
------------------------ 
2016-06-21 13:23:47.4747 

私は4つの重要な場所を得ることができます。今、私はちょうど1で試してみてください。

SQL> SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS.S') from dual; 
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS.S') from dual 
         * 
ERROR at line 1: 
ORA-01821: date format not recognized 

だから、どのように私は小数点以下1桁に設定された秒と、上記の形式で現在のタイムスタンプを取得することができますか?

答えて

2

SSSSは分数秒ではありません。 SSの値を2回繰り返すだけです。あなたの例では、あなたは13:23:47.4747を取得します - 4747はたった47回だけ表示されます。おそらくSSSSSを考えていたかもしれませんが、それは深夜0時(つまり0-86399)からの秒数なので、ここでも役に立たないでしょう。単一のSvalid format model elementではありません。

日付は小数部の秒精度を持ちません。 Fは有効な書式モデル要素でもありませんが、FFでも日付には無効です。

あなたはむしろsysdateよりも、小数秒で、サーバの時刻を取得するためにsystimestampを使用する必要があります。文字列は、一般的に悪い考えであるよう

select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF1') from dual; 

TO_CHAR(SYSTIMESTAMP,'YYYY-MM 
----------------------------- 
2016-06-21 14:42:22.7   

は、日付/時刻を保存します。私はあなたがsystimestampからそれを設定すると、小数点以下桁精度を維持する列timestamp(1)を作ることをお勧めします。あなたはそれがcastになるだろうかを見ることができます。

select to_char(cast(systimestamp as timestamp(1)), 'YYYY-MM-DD HH24:MI:SS.FF9') from dual; 

TO_CHAR(CAST(SYSTIMESTAMPASTI 
----------------------------- 
2016-06-21 14:49:09.900000000 

本当にだけでなくストレージのために、表示のために行われるべきである文字列に日付/時刻を変換します。

関連する問題