5

私はオラクル列(artnr)に長さ1が含まれており、これはnumber(9)型です。次のように番号を更新したい...

例 :

数値が 0 の場合は 00000 です 数値が 1 の場合は 00001 です 数値が 12 の場合は 00012 です

覚えておいてください: ここで 00000,0000 と 00012 は数値データ型です

以下は、私が試したが失敗した方法です..

UPDATE pitb.toestel b
   SET b.artnr = LPAD (b.artnr, 5, 0)
 WHERE b.idinventaris = 403743;

Lpad は文字列にしか適用できないため失敗しました

UPDATE pitb.toestel b
   SET b.artnr = TO_NUMBER (TO_CHAR (artnr, '00009'), '00009')
 WHERE b.idinventaris = 403743;

to_number は先頭のゼロを表示しないため、まだ失敗しています。最初の番号からのみ考慮されます

誰でも、このシナリオを解決する何かを教えてください..

pl/sql ソリューションよりも sql の方が望ましい

4

4 に答える 4

10

数値が 0 の場合は 00000 です 数値が 1 の場合は 00001 です 数値が 12 の場合は 00012 です

覚えておいてください: ここで 00000,0000 と 00012 は数値データ型です

まず、数字には先行ゼロがありません。したがって、NUMBER 値を格納すると、NUMBER のように動作させます。それらを表示したい場合にのみLPAD、先行ゼロを使用および追加できます。これは、数値を先行ゼロの文字列に変換します。

したがって、テーブルを更新する必要はありません。を使用LPADして、必要な方法で表示します。

 SQL> WITH DATA AS
  2    ( SELECT 1 ID FROM DUAL UNION ALL
  3      SELECT 11 ID FROM DUAL
  4    )
  5  SELECT
  6     LPAD(ID,5, 0) id
  7  FROM DATA
  8  /

ID
-----
00001
00011

暗黙的なデータ型変換を避けるには、 をTO_CHAR適用する前に を使用しLPADます。

于 2014-09-22T07:58:14.187 に答える