web-dev-qa-db-ja.com

DB2 SQL 10進数をゼロが埋め込まれた文字に変換

DECIMAL(11)フィールドを12345678から00012345678の文字値に変換するにはどうすればよいですか?

13
macunte

LeftPad関数なしの私のLeftPad関数

 REPEAT('0', 4-length(MY_COLUMN_VALUE))||CHAR(MY_COLUMN_VALUE) as NEW_COLUMN

MY_COLUMN_VALUE NEW_COLUMN
1               0004
23              0023

テスト...

SELECT '32' MY_VALUE, REPEAT('0', 4-length('23'))||CHAR('23') as LEFTPAB_MY_VALUE FROM sysibm.sysdummy1
0
Adam111p

DIGITS関数のみを使用します。これは、フィールドの数値や10進数などの長さを検証し、必要に応じて左側にゼロを追加するためです。

SELECT DIGITS(FIELD) FROM ...
15
kelgwiin

@Mr Fuzzy Bottonの答えにあるあなたのコメントに基づいて、私はあなたが DB2 for iLPAD関数はありません。代わりに REPEATRIGHT 関数の組み合わせを使用できます。

SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
10
bhamby

CASTの詳細については http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/castsp.htm を使用
and http://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2z10.doc.sqlref/src/tpc/db2z_scalarfunctionsintro.htm 文字列関数の場合、
これでうまくいくと思います-

SELECT LPAD( CAST(FIELD AS CHAR(11)) ,11,'0') AS PADDEDFIELD

9
AjV Jsy

あなたがそれを解決したかどうかはわかりませんが、これを試してください:

SELECT LPAD( DIGITS( fieldName ), 11, '0') ) as paddedFieldName FROM yourTable

LPADは左のパディングですが、DIGITS関数は、数値を文字列のように扱うためにDB2を取得する唯一の方法でした。

2
Filipe

これがDB2 for iで、myColumnデータ型が精度(11)およびスケール(0)のDECIMALである場合、次のようになります。

SELECT digits( myColumn ) FROM sysibm.sysdummy1

戻ります:

....+....1.
DIGITS     
00001234567

先行ゼロの数を変更するには、さまざまな方法があります。 DIGITS()を使用する前に異なる精度にキャストするのは1つの方法です。

1
user2338816

私はちょうど別の方向に行きました:cast(field as int)

0
macunte

フィールドxでこれを試してください:

substr(digits(x), 33 - length(x), length(x) )
0
funnyfish
SELECT SUBSTRING( 
          CHAR(100000000000+fieldName),
          2,11
       ) as paddedFieldName
FROM yourTable

Selectステートメントで自分のフィールドを一度だけ定義したかったので、上記は私にとってはうまくいき、整頓されていました

0
user10629183