sql >> データベース >  >> RDS >> Oracle

Oracleで月の名前の後の末尾のスペースを削除する方法

    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つ 。


    1. UNIX_TIMESTAMP()の例– MySQL

    2. DLL'SqlServerSpatial.dll'を読み込めません

    3. Oracle Pl / SQL:XMLTYPEノードをループします

    4. アップグレードの問題中に破損したSQLデータベースを修正