0

浮動小数点数を含む NUMBER タイプの列から日付を選択するカーソルがあります。4,3433 のような数値は適切に返されますが、1 より小さい数値では先頭のゼロが削除されます。

たとえば、番号 0,4513 は ,4513 として返されます。

データベースのカーソルで使用されている select を実行すると、数字が適切にフォーマットされ、先頭にゼロが付きます。

これは、カーソルによって返されたレコードをループする方法です。

FOR c_data IN cursor_name(p_date) LOOP

...

END LOOP;

それがそのように機能する理由はありますか?

前もって感謝します。

4

2 に答える 2

4

数値形式と数値を混同しています。

2 つの文字列0.123.123を数値として読み取ると、数学的に等しくなります。それらは同じ数を表します。Oracle では、真の数値表現が直接表示されることはありません。関数を使用して暗黙的または明示的に、常に数値を文字に変換して表示します

0 と 1 の間の数値は先頭に 0 を付けて表す必要があると想定していますが、これはデフォルトでは当てはまりません。この数値を表示する方法によって異なります。予期しない結果を望まない場合は、数値/日付を表示するときに明示する必要があります。次に例を示します。

to_char(your_number, '9990.99');
于 2013-09-19T16:30:28.840 に答える
1

これは、Oracle が提供するデフォルトの数値フォーマットです。何かカスタムを指定する場合は、TO_CHAR 関数を使用する必要があります (ループ内の SQL クエリまたは PL/SQL コードで)。

仕組みは次のとおりです。

SQL>
SQL> WITH aa AS (
  2  select 1.3232 NUM from dual UNION ALL
  3  select 1.3232 NUM from dual UNION ALL
  4  select 332.323 NUM from dual UNION ALL
  5  select 0.3232 NUM from dual
  6  )
  7  select  NUM, to_char(NUM, 'FM999990D9999999') FORMATTED from aa
  8  /

       NUM FORMATTED
---------- ---------------
    1.3232 1.3232
    1.3232 1.3232
   332.323 332.323
     .3232 0.3232

SQL>

この例では、'FM' - 余分な空白を抑制し、'0' は先頭/末尾のゼロを含む数字を示し、'9' は先頭/末尾のゼロを抑制する桁を示します。

ここで多くの例を見つけることができます: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34570

于 2013-09-19T16:42:10.907 に答える