2017-10-11 8 views
2

何とかselect to_date('space','space') dt from dual; 戻っていくつかの日付2017-10-01オラクル12cデュアルからto_date( ''、 '')dtを選択します。戻って2017年10月1日

しかしto_date('','space')またはto_date('space','')戻り予想通りnull

"スペース" はchr(32)

任意のアイデアですか?

おかげ

+1

"期待どおりにnull"私はそれがOracle 11のようにエラーを返すことを期待しています。 –

+0

> select to_date(chr(32)、chr(32))dtからのdt; DT --------- 01-OCT-17 –

+0

も11gで再生できますが、http://rextester.com/RTZJTK74192も参照してください。なぜ誰かがフォーマット付きのスペースでto_dateを使用しているのでしょうか。スペースの... –

答えて

1

トム・カイトによるとAskTomのフォーラムで、フォーマットおよび入力日付が決定できないときTO_DATEで使用されているいくつかのデフォルト値があります。

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4843459400346642911

default year = current year 
default month = current month 
default day = 1 
default hour = 0 
default minute = 0 
default second = 0 

これは(「『』」)TO_DATEを使用すると、Oracleはそれが現在の月の1日を使用していますので、日付は、使用されているどのような形式または入力うまくいかないことを意味していることを意味し年は2017-10-01(yyyy-mm-dd形式)です。

また、TO_DATE( ''、 '')の2番目のクエリはNULLを返します。これは、日付として指定した値が空であるためです。これはスペースとは異なります - 私はオラクルがスペースを見て、「ああ、これが何であるかわからない、デフォルトを表示する」と考えていると思います。

Oracle Format Models documentation page hereにこれについて簡単に触れていますが、デフォルト値の説明は見つかりませんでした。

更新日:変換される文字列の両方がフォーマットモデルから欠落している場合は、デフォルトでは1とみなされます。その他 'to_date('15'、 ' dd ')は現在の月と年の15日に真夜中に戻ります。極端な場合、OPはBOTH引数からすべての要素を省略したので、すべてデフォルトに割り当てられます。これは、Oracleが「どのような形式をうまくすることができない」ということではありませんが、代わりにそれはすべてのデフォルト

+1

それはかなり近いです!デフォルトは実際にはそれらのものですが、前のドキュメントでそれらを見ました。リンクが見つかると、ここに追加します。 「デフォルト」の説明はあまり正しくありません。むしろ、変換する文字列の両方がフォーマットモデルから欠落している場合、デフォルトでは1とみなされます。その他のto_date('15 '、' dd ')は、現在の月と年。極端な場合、OPはBOTH引数からすべての要素を省略したので、すべてデフォルトに割り当てられます。 Oracleは「どのようなフォーマットを実行できない」というのではなく、すべてデフォルトです。 – mathguy

+0

ありがとう!私はこの情報で私の答えを更新しました。知っておいてよかった。 – bbrumm

3

私はドキュメント内のすべてのデフォルト値を見つけることができませんでしたが、これは十分なはずです。

あなたの場合時刻コンポーネントを含まない日付値を指定すると、デフォルトの の時刻は午前0時です。日付を指定せずに日付の値を指定すると、デフォルトの日付は が当月の最初の日になります。

https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions191.htm#SQLRF06132

(これは、Oracle 11.1のためですが、他のバージョンのために同じことをするでしょう)。

コードでは、時刻コンポーネントなしの日付を指定します。および日付コンポーネントなし。上の両方のデフォルトを適用すると、あなたはあなたの答えを得るでしょう。

パズルのもう一つの小さな部分は、スペースの処理です。任意の有効なTO_DATE()を取得し、両方の引数で日付と時刻のいずれかの要素の周りに十分なスペースを追加すると、無視されます。あなたのケースでは、単一のスペースは無視されます(ただし、「折りたたまれていません」 - 入力は空の文字列に変換されません。つまり、Oracleではnull)。

関連する問題