• 締切済み

半角全角混在文字列の空白埋めについて

現在SQLServer2000のデータを固定長で出力したいと考えています。 項目ごとに固定長にして、カンマ区切りにします。 既定の長さに達しない場合は、それぞれ半角空白で埋めます。 しかしいくつかの項目では、半角と全角が混在しており、うまく想定した形になりません。 項目はnvarchar型です。 SELECT文だけで行う方法を教えて下さい。 よろしくお願いいたします。 例 A(2桁)  B(20桁)    C(20桁) 01    H25/4 入金  確認済み 02    電話済み   〒123-4567

みんなの回答

  • innoya
  • ベストアンサー率71% (10/14)
回答No.3

こんにちは。 イノ(inno)です。 20文字に達してなかった場合、半角空白で埋めるなら、 データ型をnvarcharにする必要はありますでしょうか? データ型をncharに変更すれば簡単に解決できる問題ですので ご検討ください。 下記のテスト用のSQLを参考してください。 「ColB」カラムのみnchar(20)に変更してみました。 nchar(20)にすると20文字に達してなかった場合、半角空白を自動で埋めます。 --#### テスト用のSQL #### START ################# USE tempdb GO --#### 一時テーブル作成 CREATE TABLE dbo.TempTable ( ColA nvarchar(2) ,ColB nvarchar(20) ,ColC nvarchar(20) ) --#### テストデータ登録 INSERT INTO dbo.TempTable(ColA, ColB, ColC) SELECT '01', 'H25/4 入金', '確認済み' UNION ALL SELECT '02', '電話済み', '〒123-4567' --#### データ確認 SELECT TOP 20 * FROM dbo.TempTable --#### データ型変更 ALTER TABLE dbo.TempTable ALTER COLUMN ColB nchar(20) --#### データ確認 SELECT TOP 20 * FROM dbo.TempTable --#### テスト用のSQL #### END ################# 「ColB」カラムのデータを確認してください。 後ろに空白が入っていることが確認できると思います。 データ型を変更するだけで既存のデータにも自動的に反映されますので、 もしデータが多い場合は反映まで時間がかかるかも知れません。

nrblue
質問者

お礼

数年前に入れたシステムで既にnvarcharで設定されており、 遠方のために変更もできません。 そのため現地の方に簡単にデータを作成してもらう手段を考えていました。 最終的にはSQLオンリーは断念し、VB.netで変換プログラムを作成しました。 ありがとうございました。

  • sora1515
  • ベストアンサー率58% (54/92)
回答No.2

以下でバイト数が出るらしいので DATALENGTH(CONVERT(VARCHAR(50), str)) 20-(上記) で必要分スペース詰めてはどうですかね。 LEFT(B + '____________________', 20 - DATALENGTH(CONVERT(VARCHAR(50), B)))

nrblue
質問者

お礼

既にこの方法はやってみましたが、NGでした。 ありがとうございました。

回答No.1

SELECT A,LEFT(B + "____________________",20),LEFT(C + "____________________",20) FROM TABLE これでダメなら、フィールドの最大文字数を、2、20、20桁にした作業用テーブルを用意し INSERT INTO TABLE2(A,B,C) SELECT A,B + "____________________",C + "____________________" FROM TABLE で、後ろに半角スペースを20文字足した値をINSERT INTOで作業テーブルに書き込んでから、作業テーブルをエクスポートするか、作業テーブルに対して全件抽出。 注:連続した半角スペースを書いてもスペース1文字にされちゃうので、上記例は「半角スペース」を「_」に書き換えてあります。

nrblue
質問者

お礼

nvarcharではどちらの方法も正確な答えが出ませんでした。 ありがとうございました。

関連するQ&A