- ベストアンサー
データの前ゼロ削除方法とデータの加工場所
- Win7のSQLServer2008R2環境で、CSV形式のファイルをSQLServerにインポート後、前ゼロを含むキーを集計したい場合、どのように対処すればよいでしょうか。
- 前ゼロ削除はSQL文やプログラムでの処理が考えられますが、最適な方法は不明です。データベース内での加工とデータ取り込み前の加工の違いについても教えてください。
- データの加工は基本的にはデータベース内で行いたいが、全角半角の統一など特定の場合は取り込み前に行う方が効率的です。データベースではできない処理とデータベースでしかできない処理についても教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SQL Serverには先頭のゼロを取る関数はないので、プログラムで対応された方が良いと考えます。 >「こういうことはデータベースではできないよ」 基本的には、関数で提供されている範囲の加工しか出来ないので、複雑な事はほとんどできません。 >「こういうことはデータベースでないとできないよ」 データベースでできる事はプログラムで全て出来ます。
その他の回答 (2)
- KHSSSK
- ベストアンサー率76% (13/17)
エクセルで先頭ゼロを取り除くとしたら、どのようなVBを組みますか? 文字数を取得して、先頭から何文字目がゼロではないかをループを回して 取得するような方法が思いつくのではないでしょうか。 SQLでもWHILE,LEN,SUBSTRINGなどの関数が用意されているので、これらを 利用してユーザ定義関数(スカラ値関数)を作成すれば可能ではないでしょうか。 各関数の構文はヘルプなどを参照ください。 データベースは生データを保存しておくべきで、加工されたデータを保存 すべきではないと思います。データを取り出すときに、VB,C,JAVA などの 言語を用いて加工して表示すべきではないでしょうか。 ただし、不良データは事前に取り除いておかないと、インポート時エラー になってしまいますが。 結局プログラムを組む人の技量と好みによるのではないでしょうか。 大量データを処理するときは処理速度に違いがでるとは聞いていますが。
お礼
回答ありがとうございます。 SQLでWHILEが使えるとは知りませんでした。たぶんこういう使い方になるんですね。ずいぶんプログラムっぽいですね。 http://msdn.microsoft.com/ja-jp/library/ms178642.aspx 「データベースは生データを保存しておくべき」ということですが、私もそう思います。ただ、今回は元データがデータベース由来のものではなく、おそらくCobolの出力したものなので、どうしてもある程度加工しないと集計そのものができないのです(レコードが可変長だったりします)。 その加工をデータベースで行う場合、VB,C,JAVA などのプログラムで行う場合の場合分けの自分なりの指針を求めようと思っての今回の質問です。
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
絶対にSQLでやれと言う事であれば、出来ない訳ではないので一応回答します。 (とりあえず先頭3文字までの'0'を削除する場合です、4文字以上ある場合はCASEを増やします) UPDATE テーブル名 SET 列名= RIGHT(RTRIM(列名),LEN(列名)- CASE WHEN SUBSTRING(列名,1,1)<>'0' THEN 0 ELSE CASE WHEN SUBSTRING(列名,2,1)<>'0' THEN 1 ELSE CASE WHEN SUBSTRING(列名,3,1)<>'0' THEN 2 ELSE CASE WHEN SUBSTRING(列名,4,1)<>'0' THEN 3 ELSE 4 END END END END)
お礼
ありがとうございます。大変参考になります。桁数がわかっているときはこれですね。
お礼
回答ありがとうございます。やはり前セロの削除はプログラムでないとできないのですね。「データの加工はデータベースの機能で」というのは、顧客の意向です。そうすると無理なこと、むずかしいことが多いので少し理論武装したいと思います。