Selectステートメントの日と月の値の前に先行ゼロがない日付を取得したいのですが。次のクエリを実行すると
select to_char(sysdate, 'dd.mm.yyyy') from dual;
結果として2014年3月21日を取得します。さらに、たとえば、今日が2014年3月7日だった場合、07.03.2014になります。これらの先行ゼロを取り除くにはどうすればよいですか?
select to_char(sysdate,'DD.MM.YY') -- Without Fill Mode
, to_char(sysdate-20,'fmDD.fmMM.YY') -- With Fill Mode, 20 days ago
from dual;
戻り値
21.03.14 | 1.3.14
FMフィルモード。
TO_CHAR関数の日時書式要素では、この修飾子は、後続の文字要素(MONTHなど)の空白を抑制し、日付書式モデルの後続の数値要素(MIなど)の先行ゼロを抑制します。 FMがない場合、文字要素の結果は常に空白で固定長に埋め込まれ、数値要素の場合は常に先行ゼロが返されます。空白の埋め込みを抑制するFMでは、戻り値の長さが異なる場合があります。
これを試して:
select to_char(to_date('20-oct-2000'),'fmmm/dd/fmrr') from dual
上記のクエリは、Oracleの日と月の値から先行ゼロを削除します。
これはエレガントとはほど遠いですが、機能します。
select to_number(to_char(sysdate,'dd')) || '.' || to_number(to_char(sysdate,'mm')) || '.' || to_number(to_char(sysdate,'yyyy')) from dual
基本的に、日付の各部分を数値に変換します