ORACLEでは小数の数値型が「.75」のように整数部がゼロなしで持っていますが、これをORACLEの設定で「0.75」で持つように出来ないでしょうか?
なお、あるユーティリティで型は数値型でCSVに落としたいのでTO_CHARで書式設定して文字列型に変換するやり方以外でないでしょうか?よろしくお願いします。

 

このQ&Aに関連する最新のQ&A

A 回答 (5件)

#1です。


皆さんと同じ意見ですが、
glogin.sqlファイルに

column コラム名 format 99.99 (sshibaさん記載)

を書いてしまえば何回 sql plusを切断しても
大丈夫です。(^^)
    • good
    • 0

Jittaさんと同様にSQL*Plusネタですが、一時的に設定するなら



column コラム名 format 99.99

のように数値文字列の出力フォーマットを指定することができます。
    • good
    • 0

SQL*PLUSでいいのですか?


$ORACLE_HOME/sqlplus/admin/glogin.sql
の中に書いてしまう・・・とか
    • good
    • 0

#1です。


例を書いた方が良いですね…。

column 列名 format '0.0'

で出来ました。(^^)

この回答への補足

有り難うございます。説明が足らなかったのですが、HULFTというFTP系のソフトを使用してあるDBとのデータ連携するのですが、その際にHULFTのユーティリティでCSVに一度落としてからあげます。その際に、Oracle側の数値の持ち方が「.75」のように持っていると、そのCSVをあげる際にエラーで落ちてしまいます。そのためにはORACLE側で「0.75」として保持していなければいけないようなのです。
勉強不足なのですが、「column」コマンドは一度SQL PLUSを切ってしまうと初期状態に戻ってしまう気がしたのですが。そこで、ORACLEの初期パラメータ等の何か設定がないかと思ったのですが、ないですかね?

補足日時:2003/11/06 10:20
    • good
    • 0

culumnのformatを指定してやるのは?

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QTO_CHARでのゼロ非表示について

通常は小数点第二位まで固定で表示させたいのですが
ゼロの場合は何も表示させたくありません。
TO_CHAR(COL1,'FM9,999.00')ですと'.00'が返ってきます。
書式では無理なのでしょうか?

現状は以下のようにしています。

DECODE(COL1,0,'',TO_CHAR(COL1,'FM9,990.00'))

宜しくお願い致します。

Aベストアンサー

TO_CHAR(COL1,'FMB90.99')

でできると思いますが、
どうでしょうか。

QOracleの数値型で1以下の値をセットすると、取り出すときに.15のように頭に0がつかない表記になります。

Oracleの数値型で1以下の値をセットすると、取り出すときに.15のように頭に0がつかない表記になります。デフォルトでこうなっているのでしょうか?

プログラム側で変更すれば済む話ですが、DB側で設定する方法はあるのでしょうか?

Aベストアンサー

DB側でどう表示するなどの設定はないはずです。実際に.15の内容で格納されているわけではないので。

少数をどのように表示するかは取り出すプログラムに依存することです。
なので設定方法も取り出しプログラム側の個別設定ということになるはずですね。

ちなみにSQLPLUSの設定なら
http://okwave.jp/qa347238.html
です。

QTO_CHARで小数点以下がある場合と無い場合を切り分ける方法

お世話になります。

基本的なことだと思うのですが、調べても見つけられませんでした。
わかる方教えて下さい。

現在
to_char(SUUJI,'FM9999999999990.9999999999999')

         表示
SUUJI = 10 → 10
SUUJI = 10.1 → 10. ( . が残ってしまう)

小数点以下がある場合は XXXXX.XXX
小数点以下が無い場合は XXXXX

出来るでしょうか?

Aベストアンサー

こんにちは。

>使用しているのはPL/SQLです。
やっとわかりました・・・。

rtrim(to_char(SUUJI,'FM9999999999990.9999999999999'),'.')
ですね。
(^^ゞ

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

Qupdate文で改行を入れる

こんにちは。
いつもお世話になっています。

update文を使用して、データに改行を入れたいのですが、どうすればよいでしょうか。

対象列のデータ型はVARCHAR2です。

例えばSQLPLUSから、
SPL>update 「テーブル名」set 「対象列」='あ改行い改行う改行'
を投入し、そのあと
select 「対象列」 from 「テーブル名」
とすると
SQL>あ
SQL>い
SQL>う
と出てくればよいんですが、
SQL>update 「テーブル名」set 「対象列」='あ\nい\nう\n'
としても
SQL>あ\nい\nう\n
と、「\n」が文字列としてでてきてしまいます。

SPL>update 「テーブル名」set 「対象列」='あ
2い
3う'
と投入すると、期待通りになるのですが、
そうではなく一行にまとめたいのですがどうすれば良いでしょうか。

Oracle9iを使用しています。
宜しくお願いいたします。

Aベストアンサー

こんにちわyukio200263さん
以下のSQL文でどうでしょうか?

UPDATE 「テーブル名」
SET 「対象列」= 'あ' || CHR(13) || CHR(10) ||'い'

ちょっと長くなってしまいますが、一行で可能です。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報