ちょと教えてくだされ。

oracle8iで9桁の数値(管理用の番号)があって、それをSQLで
上3桁-中3桁-下3桁っていうふうに分けたいんだけど、
なんかスマートな方法ない?

今は
select trunc(hoge/1000000) as hoge1,
(trunc(hoge/1000)*1000-trunc(hoge/1000000)*1000000)/1000 as hoge2 ....
とかやってるんで泥臭い。

で、これがキーになって他のテーブルとリレーションとってるんだけど、
RDBの設計として
  1.はじめから3つのフィールドに分けて管理する
  2.上記のように表現部をなんかの手段でサバく
  3.2つ用意する
のどれが本筋なんでしょ?

個人的には2なんだけど・・・