データベースに登録されている内容を固定長のファイルに出力する(1)

公開日: : 最終更新日:2013/11/26 SQL Server , , ,

登録されている内容を固定長で出力

データベースに登録されている内容を固定長のファイルに
出力する必要があったので、面倒な編集をSQLで行って
ファイル出力処理の簡略化を行ってみます。

1.サンプルの仕様

サンプルの仕様として

  1. 都道府県名を20バイト固定で後ろ、全角スペース埋めで出力
  2. 該当件数を20バイト固定で後ろ、半角スペース埋めで出力
  3. 該当件数を20バイト固定で前、半角0埋めで出力

2.テーブルの作成

サンプルとしてデータを格納するためのテーブルを作成します。

それぞれの項目は

  • seq   レコードをユニークにするためのキー
  • name   都道府県名
  • num   該当件数

です。

3.データの作成

出力するためのデータを作成します。

内容は適当に。

4.固定長での項目取得

各項目を指定の固定長で取得します。

です。

5.表示結果

表示結果は

大阪■■■■■■■■..................1000000000000000000010
京都■■■■■■■■...................700000000000000000007
奈良■■■■■■■■...................400000000000000000004
兵庫■■■■■■■■...................600000000000000000006
和歌山■■■■■■■...................200000000000000000002
滋賀■■■■■■■■...................000000000000000000000

表示結果をわかりやすくするために全角スペースを「■」、半角スペースを「.」に
変更してあります。

REPLICATE()は指定された文字を、指定された回数表示する関数です。
SQLServerのTransact-SQL(T-SQL)関数なのでOracleやPostgreSQL、MySQLでは
関数を変える必要があります。(環境がないので調べてません。)

内容としてはDATALENGTH()関数で取得した値のバイト数(長さ)を求め
REPLICATE()を固定長に不足分のバイト数分、埋めるべき文字を生成し、
元データと連結しています。

埋めるべき文字数を求めるのに

にしてあるのは全角文字、半角文字をしていされても同じ結果にするためです。
(全角文字の場合は「÷2」、半角文字の場合は「÷1」になります。)

これでデータベースから取得した結果は固定長になるので、
あとはこの結果をファイルに出力すれば良いだけです。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly

関連記事

SQLServerでカンマ区切り (CSV) で文字列取得

SQLの取得結果をカンマ区切りで取得 Where句のINにSQLで取得した結果を直接利用したり

記事を読む

Transact-SQLで動的にSQLを編集してカーソルを使用する

2時間もハマったのでメモ書きとして記述します。 Transact-SQLで動的にSQLを編集し

記事を読む

SQLServerのバージョン番号を取得する方法

SQLServerのバージョン番号を取得する SQLServerのバージョン番号は「@@VERSI

記事を読む

複数のストアドプロシージャ (stored procedure) でローカルテンポラリテーブルを共有する

ローカルテンポラリテーブルを共有する 先日来より悩んでいたSQLServerでの SQL

記事を読む

SQLServerのエラーコード一覧

SQLServerで発生するエラーコードとその内容を表にしてみました。 量が多いので別のサイトに分

記事を読む

DEFAULT制約付きのカラムの属性を変更する

DEFAULT制約付きのカラムの属性を変更する SQLServerでDEFAULT制約付きのカラム

記事を読む

SQLサーバ

連番中で 「歯抜け」の番号を見つけ出すSQL

テーブル内の連番の歯抜け番号を探す よくある処理でテーブルに設定されている連番の中で 「歯抜け」

記事を読む

日付の重複をSQLで検索する

SQLを使って期間の重複を見つけ出す SQLを使って、開始日付、終了日付を持っているレコードの

記事を読む

SELECTした結果をランダムに並び変える

SQLでSELECTした結果をランダムに並び変えて表示する SQLServerでSELECTした結

記事を読む

SQLServer

SQLServerでトリガーを扱ってみる

INSERT、UPADTE、DELETEトリガーを扱ってみる SQLServerにはテーブルに対し

記事を読む

GROUP BYとHAVINGで最新日付データを取得する

GROUP BYとHAVINGで最新日付データを取得する 社員マスタ

システム日付を取得する

様々な関数でコンピューターのシステム日付を取得する SQLServe

SQLで文字列を反転させる

SQLで文字列を反転させる SQLで文字列を"012345"を後ろか

2つのテーブルを結合して値を更新するSQL

2つのテーブルを結合して値を更新するSQL テーブルAの値をテーブル

複数のストアドプロシージャ (stored procedure) でローカルテンポラリテーブルを共有する

ローカルテンポラリテーブルを共有する 先日来より悩んでいたSQL

→もっと見る



PAGE TOP ↑