読者です 読者をやめる 読者になる 読者になる

タイガー!タイガー!じれったいぞー!(SE編)

AS400,WAS,GlassFish,Java,JavaEE,JSF等の開発における日々の気づきをまとめたブログ(備忘録)。

【AS400】SQL-フィールドの部分選択、部分更新

概要

  • AS400DB2/400というDBは、容易にフィールドを追加したり、変更したりするのが非常に面倒なように思います。なので、現行のテーブルには予備フィールドがあったりするわけですが、現在では桁区切り指定で使用していたりします。(予備フィールドの3〜5桁の3桁が、○○区分コードなど)
  • RPGLEであれば、データ構造を使って桁区切りをして参照/更新が容易にできますが、SQLではどうなんだろうと調べた結果、簡単にできることがわかりました。無知って怖いです!

コマンド例

SELECT文

SUBSTR関数を使用します。→ SUBSTR(フィールド名,開始位置,抽出桁数)

SELECT文

SELECT SHAINID,NAMAE,RESERVE01 
  FROM MSHAIN  
 WHERE SUBSTR(RESERVE01,2,2)='11'  
社員 コード 社員名(漢字)  予備 フィールド
   0001   佐藤       111
   0003   田中       11
   0021   スミス      11
SELECT SHAINID,NAMAE,SUBSTR(RESERVE01,2,2) 
  FROM MSHAIN WHERE SUBSTR(RESERVE01,2,2)='11'   
社員 コード 社員名(漢字) SUBSTR
   0001   佐藤      11
   0003   田中      11
   0021   スミス     11

UPDATE

文字連結子を使って文字列を編集します。下記の例では、予備フィールド(10桁)の2〜3桁目に’22′をセットし、それ以外は変更されず、更新前と同じ値がセットされます。

UPDATE MSHAIN                                           
       SET RESERVE01 = SUBSTR(RESERVE01,1,1) || '22'   
                       || SUBSTR(RESERVE01,4,7)         
       WHERE SHAINID='0021'