Transact-SQLで日本語を(2バイト文字)を含むデータをそのままSUBSTRING()すると、ずれて取得されるようです。
これで半日潰しました。
Declare @strWork [varchar](256) Declare @strtmp1 [varchar](40) Declare @strtmp2 [varchar](40) Select @strtmp1 = SUBSTRING( @strWork, 10, 40 ) Select @strtmp2 = SUBSTRING( @strWork, 50, 40 )
strTmp2に内容が予想よりずれて取得されます。
ずれないように取得するには以下のようにCAST()してから取得します。
Declare @strWork [varchar](256) Declare @strtmp1 [varchar](40) Declare @strtmp2 [varchar](40) Select @strtmp1 = SUBSTRING( CAST( @strWork AS Text), 10, 40 ) Select @strtmp2 = SUBSTRING( CAST( @strWork AS Text), 50, 40 )
また、日本語(2バイト文字)を含むデータ以降はすべてCAST()して取得する必要があります。
文字数ではなくバイト数で取得する必要があるようです。