メニューボタン
IBMi海外記事2022.12.07

SQLを使用したストリング操作

Mike Larsen 著

先日、あるプロジェクトで従業員ファイルを使用しました。その従業員ファイルでは、従業員名の姓の部分と名前の部分がコンマ区切り文字で連結された形になっていました。プロジェクトの要件は、従業員名を解析して、姓と名前に別々の列が用意されている別の表に入力することでした。従業員ファイルのデザインはそのままとして、どのようにこの処理を行ったか紹介してみようと思います。

図1では、名前を抽出するために、SQLを介して position string 関数を使用しています。

名前の抽出
図1. 名前の抽出

この例では、 trimsubstring 、および posstr 関数を使用して、コンマに後続する1つ目の文字の位置を指定しています。このケースでは、名前の位置になります。説明の便宜上、ここではストリングをハードコーディングしていますが、本番プロセスでは変数を使用します。ACSでこの例を実行すると、図2に示す結果が得られます。

名前の抽出の結果
図2. 名前の抽出の結果

次のステップは、図3に示すように、姓の抽出です。

姓の抽出
図3. 姓の抽出

このステートメントは、名前の抽出とほぼ同じような処理ですが、ここでは、サブストリングがストリングの先頭の位置から始まり、コンマの前の位置で終わるように指定しています。これを実行すると、図4に示す結果が得られます。

姓の抽出の結果
図4. 姓の抽出の結果

姓と名前を取り出すことができたので、もう1歩、先に進んでみることとします。姓と名前を固有名詞の形式(頭文字のみ大文字)に変換してみましょう。やはりSQLを使用して、図5に示すステートメントを使用します。

名前を固有名詞の形式へ変換
図5. 名前を固有名詞の形式へ変換

ここでは、名前の1文字目を大文字に変換し、2の位置以降の部分を小文字に変換して連結することで、名前を固有名詞の形式に整形しています。その結果を図6に示します。

名前の固有名詞形式への変換の結果
図6. 名前の固有名詞形式への変換の結果

同じステートメントを使用して、姓を固有名詞の形式に変換します(図7)。

姓を固有名詞の形式へ変換
図7. 姓を固有名詞の形式へ変換

このステートメントの結果を図8に示します。

姓の固有名詞形式への変換の結果
図8. 姓の固有名詞形式への変換の結果

私は、自分のRPGプログラムで、そうした方が合理的だと思われるところでは、頻繁にSQLを使用しています。この記事で紹介した手法は、様々なプロジェクトで何度も使用してきました。この手法は、数年来、自分の道具箱に入っています。

あわせて読みたい記事

PAGE TOP