- PR -

【BCP】BCPツールでCSV出力すると、空白が一つ入ってしまいます。

1
投稿者投稿内容
あき
ベテラン
会議室デビュー日: 2003/07/23
投稿数: 72
投稿日時: 2005-03-29 22:34
BCPツールを使ったCSV出力のとき、space(0)の値が半角空白1つで出力されます。
どうにか、space(0)をnullとして出力したいのですが、何かいい方法はないでしょうか?
--現状の結果
, , , ,
--期待する結果
,,,,

トリムしてもダメでした。
以下、テストしたときのデータです。
--テストデータ
create table test
(seq int
,char10 char(10)
,varchar10 varchar(10)
)
insert into test (seq , char10 , varchar10) values ( 1 , '' , '')
insert into test (seq , char10 , varchar10) values ( 2 , null , null)
insert into test (seq , char10 , varchar10) values ( 3 , ' ' , ' ')
insert into test (seq , char10 , varchar10) values ( 4 , '     ' , '     ')
insert into test (seq , char10 , varchar10) values ( 5 , '1234567890' , '1234567890')
insert into test (seq , char10 , varchar10) values ( 6 , '6' , '6')
insert into test (seq , char10 , varchar10) values ( 7 , '7 ' , '7 ')

--トリムあり
bcp "select seq , rtrim(ltrim(char10)) , rtrim(ltrim(varchar10)) from testdb.dbo.test" queryout c:\test(トリムあり).txt -c -r\n -t, -U sa -Pabc -o c:\test(トリムあり).log
--トリムなし
bcp "select seq , char10 , varchar10 from testdb.dbo.test" queryout c:\test(トリムなし).txt -c -r\n -t, -U sa -Pabc -o c:\test(トリムなし).log

--トリムあり結果
1, ,
2,,
3, ,
4,     ,     
5,1234567890,1234567890
6,6,6
7,7,7
--トリムなし結果
1, ,
2,,
3, ,
4,     ,     
5,1234567890,1234567890
6,6 ,6
7,7 ,7

どうぞよろしくお願いいたします。
[環境]Microsoft SQL Server 2000 SP3
水谷
会議室デビュー日: 2004/05/07
投稿数: 17
お住まい・勤務地: 福島県
投稿日時: 2005-03-30 08:21
確認したわけではありませんが、SPACE(0) は長さゼロの文字列を
返しているのだと思います。

私も以前同じ症状に困ったことがあったのですが、BCP は長さゼロの
文字列を 0x00 と出力するようです。それがお手持ちのテキスト
エディタではスペースとして表示されているのではないでしょうか?
一度、バイナリエディタか制御文字を表示できるテキストエディタで
確認してみてください。
あき
ベテラン
会議室デビュー日: 2003/07/23
投稿数: 72
投稿日時: 2005-03-30 09:27
水谷さん、ご回答ありがとうございました。

文字列0x00をテキストエディタで確認できました。
ところで、長さゼロの文字列を出力しないようにできないでしょうか?
case文で「SPACE(0)だったらnull」というロジックは、シンタックスエラーでだめでした。
どうぞよろしくお願いします。
あき
ベテラン
会議室デビュー日: 2003/07/23
投稿数: 72
投稿日時: 2005-03-30 09:45
自己解決しました!
NULLIF関数を使って、space(0)をnull値にしてから、右側の余白をRTRIM関数で消します。
例)rtrim(nullif(Col001,space(0)))

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

スキルアップ/キャリアアップ(JOB@IT)