- - PR -
小数フィールドの値について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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」の形で取得したいのです。 # | ||||
|
投稿日時: 2006-12-28 13:12
何のRDBをお使いか知りませんが、
殆どのRDBの[数値]の[-.23]と[-0.23]は 同じであると思うので何が問題なのか良く分かりません。 Selectで取得とは、RDB用のコンソールですか? 何か別のプログラムですか? ちなみにデータ比較ってなんですか? SQLで行うものですか? 取得した先のプログラムで使用するものですか? 文字列として比較したいのですか? RDBには大抵、数値の書式に関する関数があると思いますので、 それを調べて文字として取得するようにすれば良いと思います。 | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2006-12-28 14:52
手元にoracleがないので試していないですが、
to_char(n, '0.00')でいいのでは? to_charまで答えが出ているのであれば、
のようなコードを数パターン試すだけですぐに分かると思います。 | ||||
|
投稿日時: 2006-12-28 14:58
ご参考までに。
数値用の書式モデル http://biz.rivus.jp/number_format_element.html | ||||
|
投稿日時: 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-12-28 15:54
こんな感じじゃダメ?
select to_char(-123.12,'FM9,999.999') from dual; | ||||
|
投稿日時: 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 |