次のように定義された長さという名前の列があります。
TYPE_NAME: DECIMAL
DATA_TYPE: 3
COLUMN_SIZE: 9
BUFFER_LENGTH: 11
DECIMAL_DIGITS: 5
NUM_PREC_RADIX: 10
次の選択を実行すると:
select char(length) st_length, length from atable
St_length列に先行ゼロが表示されます。
st_length length
0043.00000 43.00000
0043.00000 43.00000
0045.00000 45.00000
0044.00000 44.00000
0044.00000 44.00000
0046.00000 46.00000
先頭のゼロを取得する理由と、それらを取り除く方法を教えてください。
編集:私はこれを先に言うつもりでしたが、忘れていました。私はdb2 v9.5.8 LUWを使用しています。
解決:私の元の目標は、長さの左端の文字を取得することでした。私はこれで終わりました:
select left(char(cast(length as int)),1) st_length, length from atable
その結果、
st_length length
4 43.00000
4 43.00000
4 45.00000
4 44.00000
4 44.00000
4 46.00000
改善は大歓迎です。
仕様により表示されます。詳細については、v9.7の 動作の変更 を参照してください。
[〜#〜] varchar [〜#〜] の内側に [〜#〜] lpad [〜#〜] が必要です。
私の状況では、CASE
ステートメントを使用してこの問題を解決できました。 _APPLICATION_OID
_はDECIMAL(17,0)
です。必要に応じて、ケースステートメントの範囲を調整する必要があります。
_SELECT LENGTH(CHAR(APPLICATION_OID)), APPLICATION_OID, CHAR(APPLICATION_OID),
CASE WHEN APPLICATION_OID > 0 AND APPLICATION_OID <= 9 THEN SUBSTR(CHAR(APPLICATION_OID),18,1)
WHEN APPLICATION_OID > 9 AND APPLICATION_OID <= 99 THEN SUBSTR(CHAR(APPLICATION_OID),17,2)
WHEN APPLICATION_OID > 99 AND APPLICATION_OID <= 999 THEN SUBSTR(CHAR(APPLICATION_OID),16,3)
END
FROM ABCDEFG.APP_MSTR
WHERE APPLICATION_OID IN (57,1,2,3,4,5,6,7,8,9,10)
WITH UR;
_