スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサードリンク

【SQL SERVER】ゼロパディングとプライマリーキーは不離一体

プライマリーキー(主キー)


データ管理として必要なものとしてプライマリーキー(主キー)があります。
データの一意性を保つ為には必須ですよね。

そして、この主キーに付きまとう悩ましいこととして「型」があります。

SQL SERVER であれば、IDENTITYの指定ができるので、
intsmallintなどの型にしている事が多いのですが、

その反面、コードだけで部署や部門、在庫先、学部などの識別を行えるようにするには、
○○番~○○番は○○用などと、数値の範囲で切り分ける必要があり、少し面倒です。

そこで、システムの要求仕様に応じて、
在庫先Aはコード先頭に「A」
在庫先Bはコード先頭に「B」
在庫先Cはコード先頭に「C」
在庫先Dはコード先頭に「D」
を付け、
さらに在庫先A内の1番目の棚は「A1]、
2番目の棚は「A2」とすることがあります。

あとは、その2桁の文字の後ろに、
5桁の数字を付けてということで対処しています。

その際、
後ろに付ける5桁の数値を入庫時に自動採番するようにしたとすると、
既に割り振っている5桁の数値の最大番号+1を
新しく採番するという流れになります。

既に「A1000001」が存在したとすると、
「A100002」とするわけです。

ゼロパディング


ここで必要となってくるのが、「ゼロパディング」です。
【zero padding】
ゼロ埋め、ゼロサプライ、前ゼロ、先行ゼロなどの呼ばれているものですね。

1という数値を5桁固定長のデータとして扱いたい場合に、
左に0を追加して「00001」とするような処理のことを意味します。

逆に、先頭の0を削除して自然な数値表記に戻す(「00001」→「1」)処理は
「ゼロサプレス」(zero suppress)といいます。

SQL SERVER 2012からは Format関数が利用できるようになったので、
書式指定子に "0"を指定する事で、ゼロパディングが実現できます。
FORMAT(コード,'00000')といった感じになります。

FORMATの構文は 【FORMAT (Transact-SQL)】をご覧ください。

SQL SERVER 2008でゼロパディングの書き方


SQL SERVER 2008以前はFormat関数には対応していないので、
自前で文字列変換などの記述が必要となります。

今回の5桁の数字の場合、
select RIGHT('00000'+CONVERT(varchar,コード+1),5)としたいところですが、
先頭2桁は在庫先を示す記号になっているので、
これを考慮しなければなりません。

select RIGHT('00000'+CONVERT(varchar,CONVERT(int,SUBSTRING(コード,3,5))+1),5)

といった感じですね。

左2桁の記号を含め、最大値+1とすると、
select SUBSTRING(MAX(コード),1,2) + RIGHT('00000'+CONVERT(varchar,CONVERT(int,SUBSTRING(MAX(コード),3,5))+1),5)


SUBSTRINGの構文は
SUBSTRING ( expression ,start , length )

【引数】
 expression
 character 、binary、text、ntext、または image式を指定します。

 start
 返された文字の開始位置を示す integer 式または bigint 式を指定します。
 start に 1 より小さい値を指定した場合は、expression に指定された文字の先頭から値が返されます。
 この場合、返される文字数は、start + length - 1 と 0 のどちらか大きい方になります。
 start が値式の文字数を上回る場合は、長さがゼロの式が返されます。

 length
 expression で返す文字数を正の整数または bigint 式で指定します。
 length が負の場合はエラーが生成され、ステートメントは終了します。
 start と length の合計が expression の文字数を上回る場合は、
 start の先頭から値式全体が返されます。

【戻り値の型】
 expression が、サポートされている文字データ型の 1 つである場合は、
 文字データが返されます。
 expression が、サポートされている binary データ型の 1 つである場合は、
 バイナリ データが返されます。
 返される文字列のデータ型は、指定した式のデータ型と同じです。


まとめ


ゼロパディング、ゼロ埋め、ゼロサプライ、前ゼロ、先行ゼロ
など色々な呼び方があるので、
要求仕様によって指定の記述が異なっていることが多々あります。

昔開発したパッケージソフトの要求仕様では、
「前0」なんてのがありました。

「これって何ですか?」って問い合わせたのですが、
相手の方は小バカにしたような口調で、
「コードの先頭から○桁数分0を付けることですよ!大丈夫ですか?」なんて
言われたのを思い出しました。

まぁ、それはそれとして、
プライマリーキー(主キー)に特定の識別を含めたい場合に有効になってくるのが、
ゼロパディングなどの処理かと思います。

スポンサードリンク

コメントの投稿

非公開コメント

スポンサードリンク
最新記事
カテゴリ
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

月別アーカイブ
激安特価情報
Amazonタイムセール
楽天市場タイムセール
Yahoo出店記念セール
NTT-X Store 激安特価!
激安家電のGENO PLUS
コストコ・イケアの通販
つけたまま眠れるファンデ
家電品を安値で買うならこちら!
ケーズデンキ
ベルメゾンアウトレット
激安ブランドコスメ 週末セール
モバコレ SALE
au Brand Garden
アウトレットモール BRANDELI
ブックオフオンラインのオトナ買い
ビッグカメラ◆週末特別セール
ソフマップ 中古・アウトレット
【宿代全額ポイントバック】夏休み早期予約キャンペーン
ネットプライス 送料294円
イオンモールオンライン
EDIONネットショップ
最新コメント
天気予報

-天気予報コム- -FC2-
カウンター
検索フォーム
リンクに表示されるテキスト
ランキング参加中
クリックしていただけると、 こまつもとは大変嬉しいです。



人気ブログランキングへ

ランキングに参加しています。 クリックのご協力をお願い致します。 いつもありがとうございます。 にほんブログ村 通販ブログへ
ブログランキング・にほんブログ村へ
にほんブログ村 IT技術ブログ ソフトウェアへ
にほんブログ村 ゲームブログへ
にほんブログ村 IT技術ブログへ



人気ブログをblogramで分析

趣味・個人

ランキング

リンクリックブログランキング

私を登録 by BlogPeople



RSSリンクの表示
リンク
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。