sscanf()という関数を使います。

list ( $y, $m, $d, $h, $i, $s ) = sscanf ( '2012-12-30 15:32:42', '%d-%d-%d %d:%d:%d' );
echo $y . '年' . $m . '月' . $d . '日 ' . $h . '時' . $i . '分' . $s . '秒';

preg_match()でも同じことができますが、sscanf()の方が簡単ですね。
ちなみにpreg_match()だとこんな感じでしょうか。

preg_match ( '/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/', '2012-12-30 15:32:42', $result );
array_shift ( $result );
list ( $y, $m, $d, $h, $i, $s ) = $result;
echo $y . '年' . $m . '月' . $d . '日 ' . $h . '時' . $i . '分' . $s . '秒';