2013-06-20 2 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

を使用して、日付と番号の形式を指定しますTO_CHARを使用せずに、あなたの後のフォーマットの日付。

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

HH:M:SSの代わりにHH:MI:SSにする必要がありますか? –

+0

@MaximEliseevを修正してくれてありがとう!それはタイプミスでした。私はあなたの修正で答えを更新しました。 –

8

これは、インスタンスのデフォルトとして設定されているOracle日付形式です。

あなたは正しく...多かれ少なかれ、このようなものを参照する形式を指定する必要があります:あなたは、あなたの(セッション依存使用され、暗黙的な日付変換、に頼っている

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

おかげで、私は 'select *'を使うことができません。私はすべての列を列挙しなければなりません: 'select col1、col2、to_char(...)from visit' ??それは正しい? – Buras

+0

@Buras - Ed Gibbsが示したように、 'alter session'を発行すると' select * 'を使うことができます。 –

2

を、多分から継承されましたDBのデフォルト)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

一般に、インプリシット変換には決して依存しないほうがよいです。あなたが今期待しているものが得られたとしても、それらはセッション固有のものになる可能性があるので、別のクライアントの別のユーザーは、これは失敗を引き起こすだけでなく、間違って見えることがあります。あなたの元のクエリの出力は、希望、

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

その方法:必ず、あなたもこのようなすべての日付に適用される書式を設定することができ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)を使用して日付を格納します。 –

関連する問題