0

私は以下のビューを持っています:

    CREATE OR REPLACE  VIEW viewA ("col1", "col2") AS 
  SELECT DISTINCT CAST("col1" AS CHAR(1)),
 CAST(to_char("col2",'00.0000') AS char(7))
  FROM tableA

col2 には 22.33 または 2.3 または 0.2345 または 2 のようなデータがありますが、10 進数で 4 桁、数字で 2 桁です。10 進数を含めて 7 桁の固定長のファイルに書き込む必要があります。したがって、col2、「00.0000」と書きましたが、数値形式「23.234」は、末尾のゼロなしで 23.234 として col2 に書き込まれます。

4

2 に答える 2

0

の書式コードに00.0000は、 の小数点第 4 位が含まれている必要があり23.234ます。それはいつも私のために働いています。オラクル11を使用しています。

私がやろうとしたときに私が得た問題CAST(TO_CHAR(23.234, '00.0000') AS CHAR(7))はエラーでしたORA-25137: Data value out of rangeTO_CHARこれは、 が長さ 8 の文字列を返すために発生します。

SQL> SELECT '[' || TO_CHAR(23.234, '00.0000') || ']' FROM DUAL

'['||TO_CH
----------
[ 23.2340]

TO_CHAR数値が負の場合は先頭にスペースを残し、負の場合はそこにマイナス記号を置きます。FMフォーマット文字列で修飾子を使用すると、先頭のスペースを取り除くことができます。

SQL> SELECT '[' || TO_CHAR(23.234, 'FM00.0000') || ']' FROM DUAL

'['||TO_CH
----------
[23.2340]

これはすべて、「代わりにこれを試してください」という長い方法です。唯一の変更はFMTO_CHARフォーマット文字列です。

CREATE OR REPLACE VIEW viewA ("col1", "col2") AS 
SELECT DISTINCT
  CAST("col1" AS CHAR(1)),
  CAST(to_char("col2",'FM00.0000') AS char(7))
FROM tableA

最後の注意: 列名を二重引用符で囲むと、大文字と小文字が区別され、多くの場合、問題が発生します。可能であれば、二重引用符を失うことをお勧めします。

于 2013-07-18T15:36:18.250 に答える
0

RPAD末尾のゼロを追加する関数を使用する必要があります

CREATE OR REPLACE  VIEW viewA ("col1", "col2") AS 
SELECT DISTINCT CAST("col1" AS CHAR(1)),
   RPAD(CAST(to_char("col2",'00.0000') AS char(7)),7,'0')
 FROM tableA

ただし、数値に10進値が含まれていない場合、問題に直面する可能性があります。

于 2013-07-18T15:09:56.330 に答える