
■ ファイル管理
データ(PDF)として出力されたファイルを管理するテーブルがあります。管理手法として、帳票IDや管理部署、作成日時の情報を組み合わせて、それをデータのファイル名として使用しています。
データが必要になったら、ファイル管理テーブルの各項目を結合してファイル名を生成し、それをキーとしてデータ検索を行う事が出来ます。
それはそれで良いのですが、連番という数値項目があって、それについては2byteになるように先頭に0を追加する必要があります。さて、SQLで先頭に0を追加する方法ってどうでしたっけ?
なお、環境はOracle11gです。
■ LPAD関数
やり方は色々とあると思うのですが、LPAD関数を使う事にしました。
下記の書き方をすると、NUMSQが2桁になるように、先頭に0を追加してくれます。
LPAD(NUMSQ, 2, '0')
もう少し丁寧に書くと、こうなりますか。
SELECT
CDIDLST || -- 帳票IDコード
LPAD(NUMSQ, 2, '0') || -- 連番
CDBRC || -- 支店コード
CDSEC || -- 課コード
CDCHR || -- 担当者コード
DTMKG || -- 作成年月日
TMMKG -- 作成時間
FROM
JFILE
WHERE
DTBS = (SELECT DTBSPRDY FROM MDATE)
見ての通り、LPAD関数は0埋めというよりは指定した桁数になるように、指定した値を先頭に追加するというもで、上のサンプルでは、第二引数に目標桁数として2を、第三引数に追加する文字として0を指定しています。
■ 後書き
0埋めをする処理って、SQLに限らずよく使うのですが、この手の処理って共通部品として作られてるので、自分で作る機会が少ないのでついつい忘れてしまいます。
オブジェクト指向に代表される部品化ですが、確かに便利で開発効率は上がるのですが、基本が疎かになるという悪い面もある気がします。
特に、大量にパラメータを渡して内部で複雑な処理をしている場合、よほどしっかりと考えて作らないと、保守フェイズで誰も触れない(どこに影響が出るか分からない)壮大な地雷になっちゃいます。
・・・まぁ、だからって昔ながらの方法が良いとは思わないですけど。
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end —
スポンサードリンク


