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
という欲しい答えが得られます。
これはどういうことなんでしょうか?
全然わかりません。
どなたか分かる方がいらっしゃいましたら、ご回答願います。
よろしくお願いいたします。
投稿日時 - 2003-09-19 11:18:54
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(3)
#1です~
> FMを指定しない時の左の空白一文字は、負値のマイナス記号用のスペースです。
> 負の値をTMP_TBLに入れてSELECTすると、左に空白一文字が付与されません。
そんなことがあったんですねぇ、、、
符号のスペースなんていらないですけど、、、
#2さん、お勉強になりました。
ありがとうございました。
参考URL:http://tsubosak.hp.infoseek.co.jp/2-10/7-column.html
投稿日時 - 2003-09-19 13:34:59
こんにちは。
Oracle9.2.0.1でテストしました。
同様の現象が再現しました。
SUBSTR(TO_CHAR('12
------------------
012345
↑
このサイトでは半角の空白が削除されますが
一番左に空白がありましたよね?
なぜか、一番左に空白が入るみたいです。
ですので、結論としてはTRIMをかけてからSUBSTRすれば、希望の値が取得できます。
SQLは以下の通りになります。
SELECT SUBSTR(TRIM(TO_CHAR('1234567','00000000')),2,6) FROM DUAL;
んーTO_CHAR関数のバグなんですかねぇ、、、
投稿日時 - 2003-09-19 12:05:30