TO_CHAR()
を使用したことがある場合 月の名前を使用して日付をフォーマットする関数を使用すると、月が右パディングで返される場合があることに気付いたかもしれません。
これは、使用されている言語とカレンダーに基づいて、月の名前が最長の月の名前よりも短い場合にデフォルトで発生します。
たとえば、言語が英語でカレンダーがグレゴリオ暦の場合、最長の月の名前は9月で、9文字の長さです。日付から月を返し、たとえば3月(5文字の長さ)の場合、デフォルトでは、3月の末尾に4つのスペース(5 + 4 =9)があります。
幸い、必要に応じてこの右側のパディングを簡単に削除できます。右側のパディングを削除するには、fm
を使用します フォーマット修飾子。
問題
まず、解決しようとしている問題は次のとおりです。
SELECT
TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;
結果:
08-MARCH -2030
月の名前と年の間に大きなギャップがあることがわかります。このギャップが必要ない場合は、fm
を使用できます 以下に示すように、修飾子。
ソリューション
これが解決策です:
SELECT
TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;
結果:
8-MARCH-2030
今では月と年の間にギャップはありません。
フォーマットモデルの前にfm
を追加するだけでした 。
fm
format修飾子は、「FillMode」の略です。デフォルトでは、Oracleは末尾の空白文字と先行ゼロを使用してフォーマット要素を一定の幅で埋めます。幅は、関連するフォーマットモデルの最大要素の表示幅と同じです。 fm
を使用する 修飾子は、そのようなすべてのパディングを抑制します。
fm
にお気づきかもしれません 修飾子は、日番号の先行ゼロも抑制しました。これが不要な場合は、fm
を配置できます MONTH
の前の修飾子 代わりに要素をフォーマットします。
このように:
SELECT
TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;
結果:
08-MARCH-2030
今回は、fm
その日に適用されませんでしたが、でした 月と年に適用されます。
その年の先行ゼロを抑制したくない場合は、別のfm
を追加する必要があります。 年の前に。
これが私の意味を説明する例です:
SELECT
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;
結果:
r1 r2 ______________ ________________ 08-MARCH-30 08-MARCH-0030
最初の列は1つのfm
のみを使用します (MONTH
の前 。
2番目の列は2つのfm
を使用します 修飾子(MONTH
の前に1つ 、およびYYYY
の前に1つ 。