- PR -

小数フィールドの値について

投稿者投稿内容
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-12-28 13:01
テーブルの中に、
 number(5.2)
のフィールドが定義されており、以下のデータが登録されています。
 1:999.32
 2:88.2
 3:-0.23

このデータをSelectで取得した際、
 1→999.32
 2→88.2
 3-.23
となってしまいます。
3の値は、「-0.23」として取得したいのですが、どのようにすれば期待できる値で取得できるのでしょうか??


#データ比較するため、「-0.23」の形で取得したいのです。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-12-28 13:12
何のRDBをお使いか知りませんが、
殆どのRDBの[数値]の[-.23]と[-0.23]は
同じであると思うので何が問題なのか良く分かりません。

Selectで取得とは、RDB用のコンソールですか?
何か別のプログラムですか?

ちなみにデータ比較ってなんですか?
SQLで行うものですか?
取得した先のプログラムで使用するものですか?
文字列として比較したいのですか?

RDBには大抵、数値の書式に関する関数があると思いますので、
それを調べて文字として取得するようにすれば良いと思います。
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-12-28 14:42
かつのりさん、回答ありがとうございます。

DBはOracle10gです。

>殆どのRDBの[数値]の[-.23]と[-0.23]は
>同じであると思うので何が問題なのか良く分かりません。

SQL*Loaderでデータを登録し、重複データをBadFileに出力しています。
で、BadFileに出力したデータが、どのデータと重複しているかを、小数値を格納しているフィールドを用いて文字列として比較しています。
(C#でのアプリを用いる。)

その際、Loaderのファイルでは「-0.23」としているのですが、DBから取得できる値は「-.23」となっているので困っています。

#データ件数が非常に多いので、RDB側で処理したいと思っています。


To_Char()で数値フォーマットが指定できるのですが、
 ・to_char(field,000.00)
などとすると、取得できるデータが
 -000.23
となってしまいます。。。
 -0.23
と取得するには、どのメソッドを用いればいいのでしょうか?


[ メッセージ編集済み 編集者: extream 編集日時 2006-12-28 14:44 ]
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-12-28 14:52
手元にoracleがないので試していないですが、
to_char(n, '0.00')でいいのでは?

to_charまで答えが出ているのであれば、
コード:
select to_char(-0.12, '0.00') from dual


のようなコードを数パターン試すだけですぐに分かると思います。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-12-28 14:58
ご参考までに。

数値用の書式モデル
http://biz.rivus.jp/number_format_element.html
extream
ベテラン
会議室デビュー日: 2005/12/26
投稿数: 83
投稿日時: 2006-12-28 15:07
みなさん、回答ありがとうございますm(__)m

かつのり様>
情報の提示で抜けているものがありました、すいません。
SQL*Loaderのデータファイルに登録するデータは、
 0.12
12.1
130.23
130.1
のように、必ず小数点2桁まで記述されているとは限りません。
ですので、
 to_char(n, '0.00')
とすると、
 130.1 → 130.10
となってしまうのです。
SQL*Loaderのデータファイルに登録したデータの状態でDBから取得できる必要があるんです。

SQL*Loaderのデータファイルを作成する際に、C#側でフォーマット関数をかましてやれば、かつのり様のおっしゃられた方法で問題なく対応できますが、データ数が100万件オーバーになる場合、1件ずつフォーマット関数をかますと処理時間が増えてしまうので、できれば使いたくないのです。。。

ひろれい様>

http://biz.rivus.jp/number_format_element.html
で、調べさせてもらってます。
が、ぱっと見た感じだと、期待する値を持ってくる方法がないようでした。





やはり、SQL*Loaderのデータファイルを作成する時に、フォーマットを統一させるしか方法はないでしょうか?
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-12-28 15:54
こんな感じじゃダメ?

select to_char(-123.12,'FM9,999.999') from dual;
未記入
会議室デビュー日: 2006/03/22
投稿数: 19
投稿日時: 2006-12-28 16:21
0.12 のときに .12 になるから 'FMB9,990.999' かな??

でも http://biz.rivus.jp/number_format_element.html には
マニュアルと違うとか書いてありますね(自分はマニュアル読んでませんので…略)

SQL> select to_char(-0.12,'FMB9,990.999') from dual;

TO_CHAR(-0.12,'FMB9,
--------------------
-0.12

スキルアップ/キャリアアップ(JOB@IT)