二重引用符で囲むと、書式マスクに任意のリテラルを追加できます。
SQL> ed
Wrote file afiedt.buf
1 SELECT TO_CHAR(TO_DATE('December 25th, 2004', 'MONTH DD"th", YYYY'),
2 'DD-MM-YY')
3* FROM dual
SQL> /
TO_CHAR(
--------
25-12-04
もちろん、これは文字列に常にリテラル文字列が含まれている場合にのみ機能しますth
。他のサフィックス (つまり ) を持つ他の文字列がある場合December 1st, 2004
、エラーが発生します。
SQL> ed
Wrote file afiedt.buf
1 SELECT TO_CHAR(TO_DATE('December 1st, 2004', 'MONTH DD"th", YYYY'),
2 'DD-MM-YY')
3* FROM dual
SQL> /
SELECT TO_CHAR(TO_DATE('December 1st, 2004', 'MONTH DD"th", YYYY'),
*
ERROR at line 1:
ORA-01861: literal does not match format string
両方を処理したい場合は、文字列を日付に変換してから別の文字列に戻す前に、おそらく元の文字列を解析してサフィックスを削除する必要があります
SQL> ed
Wrote file afiedt.buf
1 WITH x AS (
2 SELECT 'December 1st, 2004' str FROM dual UNION ALL
3 SELECT 'December 25th, 2004' FROM dual
4 )
5 SELECT TO_CHAR(
6 TO_DATE( SUBSTR( str, 1, INSTR( str, ',' ) - 3 ) ||
7 SUBSTR( str, INSTR( str, ',' ) ),
8 'MONTH DD, YYYY' ),
9 'DD-MM-YY' )
10* FROM x
SQL> /
TO_CHAR(
--------
01-12-04
25-12-04