2016-06-21 103 views
1

我想在類似於以下的Oracle數據庫設置的值:獲取與秒特定格式的當前時間戳到小數點後一位

2016-06-21 03:07:25.0 

它是當前日期的VARCHAR一個數字小數點後面秒。我試過多種方式來實現這一點,但無濟於事:

SQL> select sysdate from dual; 

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

從這個我想:

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 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 

那麼我怎樣才能得到上述格式的當前時間戳秒設置爲一位小數?

回答

2

SSSS不是小數秒。這只是重複了SS值兩次;在你的例子中你得到13:23:47.4747 - 4747只顯示了兩次。也許你在考慮SSSSS,但這是自午夜以來的秒數(即0-86399),因此在這裏也沒有用。單個S不是valid format model element

日期沒有小數秒精度。單個F也不是有效的格式模型元素,但即使FF在某個日期無效。

您需要使用systimestamp獲取服務器的時間與分數秒,而不是sysdate

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   

存儲的日期/時間作爲字符串通常是一個壞主意。我建議你製作timestamp(1)的列,當你從systimestamp設置它時,它將保持一位小數精度。你可以看到,它將與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 

轉換日期/時間字符串真的應該只進行顯示,而不是存儲。

相關問題