• ベストアンサー

TO_NUMBERについて。

pl/sqlで select SUBSTR(LPAD(TO_CHAR(NVL(koza_no, 0)), 8, '0'), 2, 7), from XXX; とした時に、 to_charつけると全桁フルとか全桁スペースとかテストパターン色々やってみたけど7文字が14文字になっちゃうのです。 だから結局 SUBSTRB(LPAD(TO_CHAR(NVL(koza_no, 0)), 8, '0'), 2, 7) にしましたが、なぜか分かる方、回答をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • pussyfoot
  • ベストアンサー率28% (39/138)
回答No.2

>1桁目から取得できないのはちょっと謎ですが、2桁目から取得する方法を仕事場の>皆さんが試しているのでそれでいいらしいです。 >腑に落ちませんが。。。 Oracleの仕様です。数値型をTO_CHARで変換した場合の頭スペースは本来は符号(+)が入る所です。マイナスは-を表示しプラスはスペース(空白)となるのです。プラスの時に空白を取ることも可能です。 詳しくはリファレンスマニュアルのTO_CHAR関係をご覧ください。

chika_chan
質問者

お礼

ありがとうございました。 ORACLEの仕様ならば納得です。 「一般人」の方なのに物知りですね~ 見習わなくちゃ★ どうもありがとうございました(^-^)/

その他の回答 (1)

  • NAKYUK
  • ベストアンサー率50% (8/16)
回答No.1

> 全桁フルとか全桁スペースとかテストパターン色々やってみたけど この部分がよく分からないです。 koza_no ってのはNumberで、7バイトの前0埋めをしたいということだと思いますが、 私は全然問題ないと思います。 LPADで8バイトの0埋めをして、 あとから右7バイトを取っているのは、 koza_noに7桁以上の数字が入っている場合を考慮していると判断しました。 7文字が14文字になる...なぜでしょう... 役立たずにすみません。

chika_chan
質問者

お礼

ありがとうございました。 「全件フル」「全件スペース」はkoza_noの中身を中身を調べたり、スペースが入っているのか調べたりのテストです。 1桁目から取得できないのはちょっと謎ですが、2桁目から取得する方法を仕事場の皆さんが試しているのでそれでいいらしいです。 腑に落ちませんが。。。 回答書いてくださっただけでもありがたいことです。 ありがとうございました。(^-^)/

関連するQ&A

専門家に質問してみよう