DECIMAL(11)
フィールドを12345678
からの文字値に変換するにはどうすればよい00012345678
ですか?
10 に答える
DIGITS
この関数は、数値や小数などのフィールドの長さを検証し、必要に応じて左側にゼロを付けて完了するため、この関数のみを使用して ください。
SELECT DIGITS(FIELD) FROM ...
結果の文字列の長さは常に次のとおりです。
- 引数が小整数の場合は5
- 引数が大きな整数の場合は10
- 引数が大きな整数の場合は19
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
あなたがそれを解決したかどうかはわかりませんが、これを試してください:
SELECT LPAD( DIGITS( fieldName ), 11, '0') ) as paddedFieldName FROM yourTable
LPADは左側のパディングですが、DIGITS関数は、DB2に数値を文字列のように処理させる唯一の方法でした。
これがDB2foriであり、myColumnデータ型が精度(11)およびスケール(0)のDECIMALである場合、次のようになります。
SELECT digits( myColumn ) FROM sysibm.sysdummy1
戻ります:
....+....1.
DIGITS
00001234567
先行ゼロの数の変更は、さまざまな方法で行うことができます。DIGITS()を使用する前に別の精度でキャストするのは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
SELECT SUBSTRING(
CHAR(100000000000+fieldName),
2,11
) as paddedFieldName
FROM yourTable
selectステートメントで自分のフィールドを1回だけ定義したかったので、上記はうまくいき、きちんとしています
私はちょうど反対の方向に行きました:cast(field as int)
あなたのフィールドxのためにこれを試してください:
substr(digits(x), 33 - length(x), length(x) )
数値8,0(datenumfld = 20170101)から01/01/2017
これは私にとってはうまくいきます:
DATE(TO_DATE(CHAR(datenumfld), 'YYYYMMDD')) as YourDate