0

以下のクエリを使用しています。

select sysdate from dual where to_char(sysdate,'DD-MM-YY')='28-MAY-13';

出力はヌルです。ただし、以下のクエリでは、出力は現在の日付です。

select sysdate from dual where to_date(sysdate,'DD-MM-YY')= to_date('28-MAY-13','DD-MM-YY');

to_char 関数が sysdate を返せないのはなぜですか?

日付を比較するために to_char を使用すべきではありませんか?

4

2 に答える 2

4

について: to_char を使用して日付を比較するべきではありませんか?

いいえ、すべきではありません。表示目的で日付をフォーマットするには、to_char を使用する必要があります。他の理由があるとしたら、それはおそらく悪い考えです。

オラクルで日付を比較する場合、オラクルの日付には時間が含まれることに注意してください。値が日付範囲内にあるかどうかを確認する最良の方法は次のとおりです。

where myDateField >= date1
and myDateField < the day after date2

日付範囲が今日の場合は、次のようにします。

where myDateField >= trunc(sysdate)
and myDateField < trunc(sysdate + 1 )

文字列である入力パラメーターと比較する場合は、to_date を使用して文字列を日付に変換し、同じ一般的な考え方を実装します。

于 2013-05-28T18:56:21.667 に答える
3

「28-MAY-13」にマッピングするには、「DD-MON-YY」形式を試してください

「MM」は月番号にマップされます。

編集: SQL は、to_date で正しい形式を使用することを理解できます。入力文字列が「28-MAY-13」形式であることがわかると、「DD-MM-YY」を「DD-MON-YY」に自動的に変換します。ただし、to_char は仮定を行いません。「28-05-13」と「28-MAY-13」を比較しようとしています

EDIT2: DUAL は 1 行しか返せないことに注意してください。だからあなたはただすることができます

 SELECT sysdate FROM DUAL

Dan Bracuk は、日付の比較についていくつかの良い点を持っています。可能であれば、日付形式のままにしてください。時刻ではなく日のみが重要な場合は、trunc(DateTime) を使用します。これは通常、「=」を使用する場合に必要ですが、BETWEEN をチェックする場合は必要ないことがよくあります。

于 2013-05-28T15:56:10.307 に答える