- 締切済み
半角全角混在文字列の空白埋めについて
現在SQLServer2000のデータを固定長で出力したいと考えています。 項目ごとに固定長にして、カンマ区切りにします。 既定の長さに達しない場合は、それぞれ半角空白で埋めます。 しかしいくつかの項目では、半角と全角が混在しており、うまく想定した形になりません。 項目はnvarchar型です。 SELECT文だけで行う方法を教えて下さい。 よろしくお願いいたします。 例 A(2桁) B(20桁) C(20桁) 01 H25/4 入金 確認済み 02 電話済み 〒123-4567
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- innoya
- ベストアンサー率71% (10/14)
こんにちは。 イノ(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」カラムのデータを確認してください。 後ろに空白が入っていることが確認できると思います。 データ型を変更するだけで既存のデータにも自動的に反映されますので、 もしデータが多い場合は反映まで時間がかかるかも知れません。
- sora1515
- ベストアンサー率58% (54/92)
以下でバイト数が出るらしいので DATALENGTH(CONVERT(VARCHAR(50), str)) 20-(上記) で必要分スペース詰めてはどうですかね。 LEFT(B + '____________________', 20 - DATALENGTH(CONVERT(VARCHAR(50), B)))
お礼
既にこの方法はやってみましたが、NGでした。 ありがとうございました。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
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文字にされちゃうので、上記例は「半角スペース」を「_」に書き換えてあります。
お礼
nvarcharではどちらの方法も正確な答えが出ませんでした。 ありがとうございました。
お礼
数年前に入れたシステムで既にnvarcharで設定されており、 遠方のために変更もできません。 そのため現地の方に簡単にデータを作成してもらう手段を考えていました。 最終的にはSQLオンリーは断念し、VB.netで変換プログラムを作成しました。 ありがとうございました。