• ベストアンサー

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

  • TO_NUMBERについて。

    こんにちは。TO_NUMBERについてなのですが。PL/SQLでto_number(substr('テキスト',1,5))とした時に、テキストが'ABCDEFGH'だった場合抽出してくる文字列は'ABCDE'ですよね?でも、今仕事でこの処理を行うと必ず始めの1文字目がスペースとなり、' ABCD'が抽出されてしまいます。to_number(trim(substr('テキスト',1,5)))したほうがいいのでしょうか?何が原因だったのか、ご存知の方、回答よろしくお願いいたします。

  • SUBSTR関数の結果が予想と異なる

    こんにちは。 現在Oracle8.1.7.4でSUBSTR関数を使っているのですが、 私の考えだと、下のSQLを実行すると、'123456'が戻ると思っていたのですが、 '012345'が戻ってきますこれはどういうことでしょうか? SELECT SUBSTR(TO_CHAR('1234567','00000000'),2,6) FROM DUAL; SUBSTR(TO_CHAR('12 ------------------ 012345 と表示されてしまいます。 これを、 SELECT SUBSTR(TO_CHAR('1234567','00000000'),3,6) FROM DUAL; に変更すると、 SUBSTR(TO_CHAR('12 ------------------ 123456 という欲しい答えが得られます。 これはどういうことなんでしょうか? 全然わかりません。 どなたか分かる方がいらっしゃいましたら、ご回答願います。 よろしくお願いいたします。

  • 外部結合で取得した項目にNVL関数

    次のSQL文があります ------------------------------------ SELECT A.*,NVL(B.KOMOKU,'') FROM A,B WHERE A.NO = B.NO(+) ------------------------------------ この場合にBにデータがなかった場合に NVL(B.KOMOKU,'') が動かなくてNULLが帰ってきてしまいます。 これをなんとか空白として取得するには どうすればいいのでしょうか?

  • TO_DATEの使い方を教えて下さい

    Oracleを習い始めたばかりで、とても初歩的な質問ですみません。 customer_numberが124でorder_dateが09/05/98のレコードをSELECTしたいのですが、 TO_DATEを使うとうまくいきません。 その条件に合うレコードは存在して、日付をデフォルトの形で書くとSELECTできます。 TO_DATEの使い方を間違えているのでしょうか。 よろしくお願いします。 SQL> select order_number 2 from orders 3 where customer_number='124' and order_date='05-SEP-98'; ORDER ----- 12500 SQL> select order_number 2 from orders 3 where customer_number='124' and order_date=to_date('09/05/98','MM/DD/YY'); no rows selected

  • LONG型の先頭250バイトを Varcharとして取得できますか?

    お世話になります。 Long型列の先頭250バイトが欲しいのですが Select Substr(FIELD01, 1, 250) from TABLE01 とすると、 ORA-00932 が返ってきてしまいます。 なにかいい方法ありませんでしょうか? できれば、PL/SQLは使いたくなく、別テーブルをCreate Table as Selectも避けたいです。

  • where句中のtrim関数について

    いつもお世話になっております。 今回は標題の件について、ご教授下さい。 カラム「XXX_CODE」はCHAR(3)の項目です。 この項目が半角スペース(△)のものを条件としてレコードを引き当てたいときに、以下のSQLではうまくデータが取得できません。 trim関数の使い方に誤りがあるのでしょうか。 ◆データ XXX_NO    XXX_CODE -------------------------------- 111     100 222     △△△ 333     200 ◆SQL select XXX_NO from hoge where trim(XXX_CODE) = '' ◆結果 該当レコードなし (本来なら「XXX_NO = 222」のデータを取得したい) 初歩的なことかも知れませんが、ご回答頂ければ幸いです。 よろしくお願いいたします。

  • 数値を文字型に変換する時の書式設定が思い通りにできず悩んでいます。

    Oracleの数値→文字型変換で  SELECT TO_CHAR(売上金,'FMS0000000D00') FROM XXX_TABLE のように文字型に変換する時に先頭に符号(+または-)をつけ、指定 した位置に小数点(ピリオド)をつけ、桁数に満たない部分(左側) には「0」をセットする事がどうしても必要になってしまいました。  上記例で「売上金」の属性がNUMBER(9,2)、値が 123.4だとした場合  処理結果として期待する文字列は、+0000123.40 です。 これと同じ変換を「SQL Server2000」で実行したいと思い、 SELECT STR(売上金,11,2)などとしてみましたが、  "     +123.40" のように左側が半角スペースになり「0」を   セットする事ができません。  SELECT CONVERT(CHAR(11),売上金,n)でも同様のようです。 SQLServer2000 どのようにすればできるか(あるいは不可能であるか) ご存じの方がお見えでしたら、ご教示いただけないでしょうか?

  • SQLの結果に納得できません。どなたか解説していただけないでしょうか。

    あるSQLの実行結果がどうも納得できないのです。 こちらで詳しい方に解説していただけたらと思い投稿しました。 以下SQL1の実行結果ですが、なぜ'A'の後ろに半角スペースが入ってしまうのでしょうか? とりあえず私はSQL2のように書き直して本番のSQLは対応しました。 しかし、なんともスッキリできないのです・・・。 (前提条件) customerテーブルは10件あるとします。 (SQL1) select 'A'|| (select to_char(count(*),'000') from customer) expr1 from dual; (SQL1結果) 'A'の後ろになぜか半角スペースが入ります。 expr1 ------- A 010 (SQL2) select 'A'|| trim((select to_char(count(*),'000') from customer)) expr1 from dual (SQL2結果) 'A'の後ろに半角スペースは入りません。 expr1 ------- A010 以上よろしくお願いします。

  • MS SQL Server のselectで金額フォーマット表示

    MS SQL Serverでselect時に金額フォーマットをしたいと考えています。Oracleでいうと select to_char(123456, '9,999,999') from dual というやつです。 やり方を教えていただけますか? 宜しくお願いします。

  • TO_DATE関数について

    TO_DATE関数を使用して文字を日付型に変換して表示させようと打っているのですが、エラーが出て困っています。 どこが間違っているのでしょうか? 回答のほど宜しくお願いいたします。 1 select to_date('1/OCT/2004', 'DD/MON/YYYY') 2* from dual SQL> / select to_date('1/OCT/2004', 'DD/MON/YYYY') * 行1でエラーが発生しました。: ORA-01843: 指定した月が無効です。

専門家に質問してみよう