68

Oracleのデフォルトの日付形式はYYYY-MM-DDです。つまり、私がそうする場合:

 select some_date from some_table

...日付の時間部分が失われます。

はい、私はあなたがこれを「修正」できることを知っています:

 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

しかし、真剣に、なぜ上記がデフォルトではないのですか?特に、2つの主要なタイムトラッキングデータ型(DATEとTIMESTAMP)の両方に(少なくとも)1秒までの精度を含む時間コンポーネントがあるDBMSでは。

4

12 に答える 12

85

OracleデータベースとOracleSQLDeveloperを混同していませんか?

データベース自体には日付形式がなく、日付は生の形式でデータベースから出力されます。それをレンダリングするのはクライアントソフトウェア次第であり、SQL DeveloperデフォルトのフォーマットとしてYYYY-MM-DDを使用しますが、これはほとんど役に立たないことに同意します。

編集:以下でコメントしたように、SQL Developerは、DATE値を正しく表示するように再構成できますが、デフォルトが正しくありません。

于 2009-12-03T08:04:09.600 に答える
56

このクエリを使用してデータウェアハウスの入力ファイルを生成する場合は、データを適切にフォーマットする必要があります。基本的にその場合、日付(時間コンポーネントがあります)を文字列に変換します。文字列を明示的にフォーマットするか、nls_date_formatを変更してデフォルトを設定する必要があります。クエリでは、次のようにすることができます。

select to_char(some_date, 'yyyy-mm-dd hh24:mi:ss') my_date
  from some_table;
于 2009-12-03T14:03:52.967 に答える
22

YYYY-MM-DD形式は、日付(および時刻)情報の交換の標準であるISO8601の一部です。

このようなISO標準を採用することは、Oracleにとって非常に勇敢ですが、同時に、彼らが完全に普及しなかったのは奇妙なことです

一般的に、人々は何か違うことに抵抗しますが、それには多くの国際的な理由があります。

私が革命的なことを言っていることは知っていますが、少しずつでも、私たち全員がISO規格を採用する必要があります。

于 2009-12-03T06:34:49.060 に答える
13

Oracleの最大のPITAは、デフォルトの日付形式がないことです。

Oracleのインストールでは、ロケールとインストールオプションの組み合わせにより、日付を出力するための形式としてYYYY-MM-DDが選択されています(非常に賢明です!)。別のインストールでは、「DD / MM/YYYY」または「YYYY/DD/MM」を選択できた可能性があります。

SQLを別のOracleサイトに移植できるようにする場合は、 SQLの各日付列を常にまたは同様の関数で ラップするTO_CHAR(datecol,'YYYY-MM-DD')か、接続した直後にデフォルト形式を設定することをお勧めします。

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

または類似。

于 2009-12-03T06:34:19.967 に答える
10

日付形式、通貨形式、オプティマイザーモードなど、特定の値に設定されているデフォルトに依存することは決して賢明ではありません。サーバー、クライアント、またはアプリケーションで、必要な日付形式の値を常に設定する必要があります。

特に、データベースへの1回の変更でアプリケーションが破損する可能性があるため、表示目的で日付または数値データ型を変換するときにデフォルトに依存しないでください。常に明示的な変換形式を使用してください。何年もの間、デフォルトの日付表​​示形式がMM / DD / RRであるOracleシステムに取り組んでいました。これは私を苛立たせましたが、少なくとも常に明示的な変換を使用することを余儀なくされました。

于 2009-12-03T07:47:20.117 に答える
8

ほとんどのIDEでは、日付、通貨、小数点など、ある種のデータのデフォルトマスクを構成できます。

Oracle SQL Developerを使用している場合:

ツール>設定>データベース>NLS

日付形式:YYYY-MM-DD HH24:MI:SS

于 2014-09-02T12:37:23.540 に答える
5

SQL標準によるDATE値はYYYY-MM-DDです。したがって、Oracleは時間情報を格納しますが、SQL標準と互換性のある方法で値を表示していると思います。標準には、日付と時刻の情報を含むTIMESTAMPデータ型があります。

于 2009-12-03T06:31:29.910 に答える
5

これはクライアント側の「問題」であり、実際にはOracleの問題ではありません。

この方法で日付をフォーマットして表示するのはクライアントアプリケーションです。

あなたの場合、このフォーマットを行うのはSQL*Plusです。
他のSQLクライアントには他のデフォルトがあります。

于 2011-01-06T00:14:47.920 に答える
3

私はOracleユーザーではありませんが(最近はとにかく)、しかし...

ほとんどのデータベース(および正確な言語)では、日付に時刻は含まれていません。日付があるからといって、その日付の特定の秒を示しているわけではありません。一般に、日付だけでなく時間も必要な場合、それはタイムスタンプと呼ばれます。

于 2009-12-03T06:14:16.643 に答える
1

Oracleには、日付とタイムスタンプの両方のデータ型があります。

Oracleのドキュメントによると、日付とタイムスタンプの間でデータサイズに違いがあるため、日付のみのフィールドを使用する場合は、日付の書式を表示するのが理にかなっています。また、「秒の小数部やタイムゾーンはありません。」-したがって、タイムスタンプ情報が必要な場合は最良の選択ではありません。

「日付」フィールドは、OracleSQLDeveloperの時間コンポーネントを表示するように簡単にフォーマットできます。PL/SQLDeveloperで実行された日付クエリは時間を表示しますが、OracleSQLDeveloperには表示されません。ただし、秒の小数部やタイムゾーンは表示されません。このためには、タイムスタンプデータ型が必要です。

于 2013-03-27T09:31:13.127 に答える
1

理由:タイムスタンプ付きのデータの列を表示している場合、情報の_MOST_IMPORTANT_ビットは年です。データがデータベースに10年間存在する場合、それを知っておくことが重要です。だから年が最初に来る。

次の月、次に日、時、分が来るのは理にかなっています。客観的には、これらは表示される時間データの最も論理的なシーケンスです。

また、デフォルトでデータを表示する場合は、データの最も重要な部分のみを表示する必要があるため、デフォルトではYMDのみを表示することも意味があります。他のすべてを表示できますが、デフォルトではSQLレポートが乱雑になることはありません。

YMDは連続しているため、YMDを表示する場合、日付による順序付けは論理的です。コンピューターはシーケンシャルが得意で、論理的に見えます。

ついに。MDYを欲するあなたの偏見はあなたの偏見です。米国でも誰もがこのフォーマットを使用しているわけではありません。したがって、最も論理的な形式を使用し、他の人がデフォルトで論理的であると決定したときに憤慨しないでください。

(私は米国生まれで、Oracleを代表していません。ただし、自分で考えることはできます)

于 2014-12-30T19:09:38.870 に答える
-3

デフォルトの日付にTIMEの部分が表示されない理由についての質問に答えるために、私が見つけた唯一の答えは

Oracleチームは、LAZYの開発者または責任者で構成されています:-)

なんで ?

DATE、TIME、およびDATETIMEデータ型はSQLに存在し、Oracleはまだそれを実装していないためです!!!

オラクルにとっては残念です。

ただし、問題に対する正解は、FIXのデフォルト形式ではなく、有効数字のみを表示するSIGNIFICANTデフォルト形式を定義することです。これにより、表示されるDATE、TIME、またはDATETIME値には常にすべての重要な数字が含まれます。

例:

2015-10-14          will be displayed as 2015-10-14 (or default DATE format)
2018-10-25 12:20:00 will be displayed as 2018-10-25 12:20
1994-04-16 16       will be displayed as 1994-04-16 16

原理は単純です。

DATEの一部であるすべての数字は、常に浮動小数点数のINTEGER部分として表示されます。TIME部分の場合、浮動小数点数のDECIMAL部分と同様に、重要な部分のみが表示されます。当然、TIMEタイプ(HH:MM:SSのみ)の場合、DATE部分は表示されません。

于 2018-06-21T07:31:11.017 に答える