16

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

4

10 に答える 10

17

DIGITSこの関数は、数値や小数などのフィールドの長さを検証し、必要に応じて左側にゼロを付けて完了するため、この関数のみを使用して ください。

SELECT DIGITS(FIELD) FROM ...

結果の文字列の長さは常に次のとおりです。

  • 引数が小整数の場合は5
  • 引数が大きな整数の場合は10
  • 引数が大きな整数の場合は19
于 2015-04-21T15:12:34.583 に答える
11

@Mr Fuzzy Bottonの回答でのあなたのコメントに基づいて、私はあなたが機能DB2 for iを持っていないにいると推測していLPADます。REPEAT代わりに、とRIGHT関数を組み合わせて使用​​できます。

SELECT RIGHT(REPEAT('0', 11) || LTRIM(CHAR(your_field)), 11)
FROM your_table
于 2013-03-21T13:51:59.983 に答える
10

CAST およびhttp://pic.dhe.ibm.comの詳細については、 http ://pic.dhe.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db2.doc.sqlref/castsp.htmを使用してください。文字列関数の場合は/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

于 2013-03-20T23:35:03.397 に答える
3

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

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

LPADは左側のパディングですが、DIGITS関数は、DB2に数値を文字列のように処理させる唯一の方法でした。

于 2013-10-03T18:38:46.423 に答える
1

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

SELECT digits( myColumn ) FROM sysibm.sysdummy1

戻ります:

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

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

于 2015-04-22T06:46:57.900 に答える
1

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
于 2017-05-24T12:50:42.933 に答える
1
SELECT SUBSTRING( 
          CHAR(100000000000+fieldName),
          2,11
       ) as paddedFieldName
FROM yourTable

selectステートメントで自分のフィールドを1回だけ定義したかったので、上記はうまくいき、きちんとしています

于 2018-11-09T13:48:41.827 に答える
0

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

于 2013-03-21T02:03:07.920 に答える
0

あなたのフィールドxのためにこれを試してください:

substr(digits(x), 33 - length(x), length(x) )
于 2018-08-27T08:37:39.700 に答える
-1

数値8,0(datenumfld = 20170101)から01/01/2017これは私にとってはうまくいきます:

DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate
于 2018-03-15T18:19:01.460 に答える