4

以下のSQLでクエリを実行しています。私を助けてください。

 select to_date(sysdate, 'DD MONTH YYYY') , to_date(sysdate, 'yyyy/mm/dd hh24:mi:ss')
 from dual where 
 to_date(sysdate, 'DD MONTH YYYY') < to_date(sysdate, 'yyyy/mm/dd');

1) to_date(sysdate, 'DD MONTH YYYY') これにより、時刻のない Date オブジェクトが得られます (時刻が 00:00 の場合もあります)。
私は正しいですか?そうでない場合、時間を含まないDateオブジェクトのみを取得するにはどうすればよいですか?
2) 上記のクエリから、to_date(sysdate, 'yyyy/mm/dd') は to_date(sysdate, 'DD MONTH YYYY') よりも大きいようです。どうして ??



アップデート


1) 上記の URL での私の目的は、to_date 関数が日付のみ (または時間と共に) を返すことを確認することですが、形式 'DD MONTH YYYY' には時間文字 (hh:mm ..) が含まれていません。
2) 応答から、to_date は常に時刻付きの日付を返すことがわかりましたが、時刻の文字については触れていません。
3) 最後に DATE のみを取得するには、 trunc() / to_date(to_char(sysdate,'mm-dd-yyyy'),'mm-dd-yyyy') を使用する必要があります

以下を確認してください

select to_char(trunc(sysdate), 'yyyy/mm/dd hh24:mi:ss'), 
to_char(to_date(to_char(sysdate, 'yyyy-MM-dd'),'yyyy/mm/dd hh24:mi:ss'),'yyyy/mm/dd hh24:mi:ss') 
from dual;

-->hh24 :24 は、00:00 形式を取得するために重要です。

4

3 に答える 3

8

あなたは自分の足を撃っただけです。これは、暗黙的なデータ型変換と呼ばれます。

いいえTO_DATE(date)(これはあなたが求めているものです)がないため、オラクルはクエリをTO_DATE(TO_CHAR(sysdate), 'DD MONTH YYYY')どこTO_CHAR(sysdate)に変換し、デフォルトのNLSフォーマットマスクを取得します. デフォルトのマスク (NLS_SESSION_PARAMETERS を参照) によっては、1 番目が 0012 年に解決され、2 番目が 0018 年に解決される場合があります。したがって、0012 は 0018 より小さくなります。

sysdate を切り捨てたい場合は、次のようにします。trunc(sysdate)

于 2012-12-18T13:41:17.083 に答える
0

広告。1.私のテスト環境では、日付と時刻を取得しました:

select to_date('15 Maj 1998', 'DD MONTH YYYY') from dual;

結果 (ポーランド語の設定の場合):

1998-05-15 00:00:00

広告。sysdate2.電話をかけるときにを使用するのはなぜto_dateですか? この関数は、指定された形式で日時を表す文字列を想定しています。私の環境では、そのような呼び出しは失敗します。おそらく他の NLS 設定があるためsysdate、文字列にキャストできますが、そのような文字列は奇妙な結果をもたらします。ではなく文字列を使用してくださいsysdate

于 2012-12-18T13:46:51.023 に答える