No.4ベストアンサー
- 回答日時:
#3 です。
う~ん、説明が悪かったようです。すいません。
小数点以下の右0埋めはやらなくても良いという事なんですけど・・・
>NUMBER型は0埋め値をみないのですか?
お手元にORACLEのマニュアルはありますでしょうか?
「Oracle8 Server 概要」のマニュアルに「NUMBERデータ型」の項目に
「内部数値形式」がありOracle上での数値格納方法が記述されています。
そこに「Oracleは先行ゼロと後続ゼロを格納しません」との記述があります。
従って[0.55]や[.55]や[0.55000]や[000.55000]でも結果として格納される
ものは同じと言うことになります。
もしテストできるのであればsqlplusで以下のsqlを実行してみてください。
1.UPDATE TABLENAME SET a = TO_NUMBER('.55');
2.UPDATE TABLENAME SET a = TO_NUMBER('0.55');
3.UPDATE TABLENAME SET a = TO_NUMBER('.55000');
4.UPDATE TABLENAME SET a = TO_NUMBER('0.55000');
結果として全て同じになると思います。
>また、0.55というデータをselectすると.55と取得するのはなぜでしょうか?
正確な解答ではないのですが、整数部の[0]が表示されない事での不具合は
ないと個人的には思いますが如何ですか?
これまた個人的にPro*C 内でSELECTする時にOracleがNUMBER型であればホスト
変数はint型やdouble型など数値型で受け取るの気がします。
その場合に整数部の[0]って意識しないような気がしますが、どうなんですか?
sqlplusであれば[COLUMN]コマンドで表示する形式も指定できますし・・・
ここは少しグレーです・・・
ではでは・・・
No.5
- 回答日時:
こんにちわ。
#1/#2 のmuyoshid です。
>>また、0.55というデータをselectすると.55と取得するのはなぜでしょうか?
> 正確な解答ではないのですが、整数部の[0]が表示されない事での不具合は
> ないと個人的には思いますが如何ですか?
については、不具合ではありません。
#2 に書いたように、書式を指定する事で小数点の左側の「0」を表示させる事
ができます。
> NUMBER型は0埋め値をみないのですか?
NUMBER 型は、小数点以下の「0」は関係ありません。
0.5も、0.50 も0.5000 も内部的には同じ事です。
No.3
- 回答日時:
こんにちは。
更新元のデータがどこなのか(テーブル?ファイル?)分かりませんが
更新元のホスト変数をVARCHAR2として更新すれば良いのではないかと
思います。
例)
ホスト変数定義
VARCHAR2 HOST_A [17]; /* S9999999999.99999形式 */
ホスト変数の初期化
memset(HOST_A.arr,NULL,sizeof(HOST_A.arr));
HOST_A.len = 0;
更新元発生データがテーブルであれば・・・
SELECT TO_CHAR(MOTO_A,'S0000000000.00000')
INTO :HOST_A
FROM MOTO_TABLE;
-----------------------------------------------------------
[MOTO_A]の値:123.5
[HOST_A]の値:arr '+0000000123.50000'
len 17
-----------------------------------------------------------
[MOTO_A]の値:NULL
[HOST_A]の値:arr '\0(NULL)'
len 0
-----------------------------------------------------------
この時、[MOTO_A]がNullであれば、[HOST_A]は初期化した時のままです。
FETCHする時は、FETCHの前に必ず初期化してください。
初期化しない状態でNullを受けてもホスト変数の値は以前のままです。
更新するときはTO_NUMBER関数を使用します。
(UPDATEする時)
SET a = TO_NUMBER(:HOST_A,'S0000000000.00000')
これでどうでしょうか?
追伸:
NUMBER型にデータを格納するときに値が'5.5'であれ、'5.50000'であれ
結果は同じだと思います。
つまり、わざわざ右0埋めしなくても良いように思いますよ。
表記上の問題でテーブルから取り出すときにCOLUMNで定義するとか、
muyoshidさんの書かれている通りTO_CHAR関数を使用するなどで対応すれ
ば良いように思います。
ではでは・・・
なるほど、つまり更新、追加するほうでわざわざ0埋めする必要がないということですか・・。
NUMBER型は0埋め値をみないのですか?
また、0.55というデータをselectすると.55と取得するのはなぜでしょうか?
No.2
- 回答日時:
こんにちわ。
#1 のmuyoshid です。
> TABLENAME.aのホスト変数値がnull(arrに値無し、len=0の状態)の場合は
> NULLを、そうでなければ桁うめしたいのですが・・・。
すみません。
1つ確認させて下さい。
「Number 型の項目 (a) の少数部を右0埋めする」との事ですが、
以下のように、書式を指定して取り出すのではダメなのでしょうか?
-------------------------------------------------
SQL> desc test
名前 NULL? 型
-------- -------- -----------------
ID NUMBER(4)
DT NUMBER(10,5)
SQL> select * from test;
ID DT
---------- ----------
1 3.14
2 100
3 .999
4
SQL> select id, dt, to_char(dt, '99990.99999') from test;
ID DT TO_CHAR(DT,'
---------- ---------- ------------
1 3.14 3.14000
2 100 100.00000
3 .999 0.99900
4
-------------------------------------------------
この回答への補足
すみません、取り出したときにNULLかではなく、
ホスト変数がNULLであるかを判定し、
NULLであればNULL値をInsert/Updateし、NULLでなければ
小数部の右桁を0埋めしたいのです。
No.1
- 回答日時:
こんにちわ。
> lpad(TABLENAME.a, 5, '0')というように処理しようとしたのですが、
> ホスト変数aに値が設定されていない場合はnullのまま追加、更新しなければ
> ならなくなり方法に困っています。
lpad(NVL(TABLENAME.a, 0), 5, '0')
のように、lpad の前にNVL をすれば良いと思います。
この回答への補足
書き方がまずかったと思います。
TABLENAME.aのホスト変数値がnull(arrに値無し、len=0の状態)の場合は
NULLを、そうでなければ桁うめしたいのですが・・・。
上記だと値が0になりませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
- その他(ブログ) Brogger独自ドメインから独自ドメインへ変更する 1 2022/09/22 13:21
- ルーター・ネットワーク機器 transix回線で契約、外部からIPv6でNASにアクセスしたい 1 2023/01/26 15:07
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
Accessを開きなおすとテキスト...
-
エクセルのフィルタ抽出が固まる
-
ACCESSのSQLで、NULLかNULLでな...
-
テキストで空欄(null?)を検索...
-
帳票フォームでのあるコンボボ...
-
更新クエリをリンクデータベー...
-
CSVファイルでテキストの改行の...
-
警察はスマホに保存した動画や...
-
式を簡単にしてください。ACCES...
-
Accessフォームからパラメータ...
-
顧客データベースを作る場合、...
-
テーブル1 2 3 の結合
-
QRコードとバーコードについて
-
縦書きテキストボックスの表示"...
-
シートが異なるセル同士を、相...
-
DocuWorksでの印刷
-
Accessのフォームへ、記録者の...
-
旧filemakerで和暦(令和など)...
-
Access クエリ上で表示させた割...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複した複数データを一つのレ...
-
sever2000使用時に検索がひっか...
-
Accessの表結合SQL
-
抽出が出来ないくらい遅いクエリ
-
Pro*C桁うめについて
-
外部結合
-
postgres 外部結合(AからB、Bか...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
Access テキスト型に対する指定...
-
Accessのフィールド数が255しか...
-
Accessでコードを入れると名前...
-
Oracle 2つのDate型の値の差を...
-
作番ってどういう意味でしょうか?
-
ACCESSのクエリで集計で、先頭...
-
変数が選択リストにありません
-
テーブルの存在チェックについて
おすすめ情報