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

Angie
2014-02-11 12:07 2521 2
現在SQLServer2000のデータを固定長で出力したいと考えています。
項目ごとに固定長にして、カンマ区切りにします。
既定の長さに達しない場合は、それぞれ半角空白で埋めます。

しかしいくつかの項目では、半角と全角が混在しており、うまく想定した形になりません。
項目はnvarchar型です。

SELECT文だけで行う方法を教えて下さい。

よろしくお願いいたします。

A(2桁)  B(20桁)    C(20桁)
01    H25/4 入金  確認済み
02    電話済み   〒123-4567

コメント

2014年 02月 12日 (17:59)
こんにちは。
イノ(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」カラムのデータを確認してください。
後ろに空白が入っていることが確認できると思います。
データ型を変更するだけで既存のデータにも自動的に反映されますので、
もしデータが多い場合は反映まで時間がかかるかも知れません。
Angie 2014年 02月 13日 (11:28)
数年前に入れたシステムで既にnvarcharで設定されており、
遠方のために変更もできません。
そのため現地の方に簡単にデータを作成してもらう手段を考えていました。

最終的にはSQLオンリーは断念し、VB.netで変換プログラムを作成しました。

ありがとうございました。