社内SEの徒然なる日記

先頭0埋めをするSQLの書き方

■ ファイル管理

データ(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 —

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する