SUBSTRは通常、ある値のa番目からb番目の値を
取り出すときに使用します。
SUBSTR(12345, 2, 3) → 戻り値:234
ところが、TO_CHARの書式を利用して変換し、
SUBSTRをかけるときには注意が必要です。
例えば、6桁表示で、桁が足りないときは前に0をつけて表示したい場合、
値が12345の場合は「012345」という値になります。
この値の1番目から3番目を取り出したい場合、
SUBSTR(TO_CHAR(12345, '000000'), 1, 3)
というように書き、戻り値は「012」と予想するかもしれません。
しかし実際には、「01」が取れます。
TO_CHARをかけたときに「012345」の前に半角スペースが入るので、
実際には「 01」と取れていたためです。
これを回避するには、
SUBSTR(TO_CHAR(12345, 'FM000000'), 1, 3)
というように書式の前に「FM」をつけることによって実現できます。
これで「012」という値が取れるようになります。