2013-06-20 115 views
5

我的訪問表如下:Oracle。如何輸出日期和時間?

insert into Visit 
values(12, to_date('19-JUN-13', 'dd-mon-yy'), to_date('19-JUN-13 12:00 A.M.' , 'dd-mon-yy hh:mi A.M.')); 
insert into Visit 
values(15, to_date('20-JUN-13', 'dd-mon-yy'), to_date('20-JUN-13 02:00 A.M.' , 'dd-mon-yy hh:mi A.M.')); 
insert into Visit 
values(18, to_date('21-JUN-13', 'dd-mon-yy'), to_date('21-JUN-13 10:30 A.M.' , 'dd-mon-yy hh:mi A.M.')); 

當我嘗試進行查詢: select * from Visit我得到:

SQL> select * from visit; 

    SLOTNUM DATEVISIT ACTUALARRIVALTIME                                                                                             
---------- --------- ------------------------------                                                                                          
     12 19-JUN-13 19-JUN-13                                                                                                                      
     15 20-JUN-13 20-JUN-13                                                  
     18 21-JUN-13 21-JUN-13                                                  

SQL> spool off; 

怎麼來的時候是不是有?

回答

5

您還可以設置適用於所有日期這樣的格式:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH:MI:SS PM'; 

這樣一來,原來的查詢將輸出您使用格式的日期,而不使用TO_CHAR。要恢復到通常的默認格式,只需執行以下操作:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR'; 
+1

是否應該是HH:MI:SS而不是HH:M:SS? –

+0

正確@MaximEliseev,謝謝你讓我知道!這是一個錯字。我已經用您的修復程序更新了答案。 –

8

這是oracle日期格式,它被設置爲您的實例的默認格式。

必須先指定格式看到更多或更少的..這樣的事情:

select to_char(datevisit, 'dd-mon-yy hh24:mi:ss') from visit 
+0

謝謝,那麼我不能使用'select *',我可以...嗎?我必須列出所有列:'從訪問中選擇col1,col2,to_char(...)?是對的嗎? – Buras

+0

@ Buras - 如Ed Gibbs所示,如果您發出'alter session',則可以使用'select *'。 –

2

你依賴隱日期轉換,這是使用(會話相關的,但也許從繼承數據庫默認)NLS_DATE_FORMAT設置 - 在這種情況下,似乎是DD-MON-RR

您可以使用to_char指定格式,例如:

select to_char(actualarrivaltime, 'DD-MON-YYYY HH:M:SS PM') from .. 

datetime format models are described in the documentation

總的來說,最好不要依賴implcit轉換。即使你現在得到了你期望的結果,它們也可以是會話特定的,所以另一個客戶端中的另一個用戶可以看到不同的東西。這可能會導致失敗以及看起來錯誤。始終指定日期和數字格式,使用to_dateto_charto_timestamp

2

Oracle內部遵循'DD-Mon-YY'格式存儲在數據庫中。所以它返回'DD-Mon-Y

如果你想以小時和分秒的日期格式。您可以在會話中更改NLS_DATE_FORMAT。

如果您想要查詢該實例的正好顯示目的。使用TO_char函數將其轉換爲所需的格式。

SELECT slotnum, TO_CHAR (datevisit, 'DD-MON-YY ') "DATEVISIT", 
     TO_CHAR (actualarrivaltime, 'DD-MON-YY HH:MI:SS AM') "ACTUALARRIVALTIME" 
    FROM visit 

我希望上面的查詢給你輸出,只要你喜歡。

+0

日期不會*以DD-Mon-YY或任何其他人可讀格式存儲。 Oracle使用自己的[7字節內部表示](http://stackoverflow.com/a/187492/266304)來存儲日期。 –