同じデータベースに 2 つのテーブルがあります。
Table1、New_Company_Dataには、会社名を含む列 "Company_Name" nvarchar(120) があります。
Table2、Old_Company_dataには、3 つの列 "Name1" nvarchar(40)、"Name2" nvarchar(40)、および "Name3" nvarchar(40) があります。
テーブルNew_Company_DataからテーブルOld_Company_Dataにデータをコピーしたいのですが、その前に「Company_Name」列にある会社名を分割する必要があります。私はそれを分割しようとしましたが、言葉を壊しています。
次の方法で単語を分割せずに「Company_Name」フィールドのデータを分割するにはどうすればよいですか。
IF 会社名が <=40 の場合、分割しないでください。
会社名が >40 かつ <=80 の場合、単語を壊さずに 2 つの部分に分割します。
会社名が >80 で <=120 の場合、単語を壊さずに 3 つの部分に分割します。
次のコードを使用していますが、結果が正しく生成されません。たとえば、以下のコードでは、string2 を「ik u.」として取得しています。しかし、ここでは次の 40 文字を取得したいと考えています。
declare @strs nvarchar(120)
set @strs = 'AlufinishGesellschaftfür Verfahrenstechnik u. zur
Metalloberflächenbehandlung mbH & C' --40
declare @lon int
declare @palabras int
declare @contador int
declare @posicion int
declare @string1 nvarchar(40)
declare @string2 nvarchar(40)
declare @string3 nvarchar(40)
--wordcount
set @palabras = LEN(@strs)-LEN(replace(@strs, ' ', ''))+1 --3
--words per batch
if (LEN(@strs)<=40) set @lon = @palabras
if (LEN(@strs)>40 AND LEN(@strs)<=80) set @lon = @palabras/2 --3
if (LEN(@strs)>80 AND LEN(@strs)<=120) set @lon = @palabras/3
--set @lon = @palabras/3
set @contador = 1
set @posicion = 0
while @contador <= @lon
begin
-- search for the first batch
set @posicion = CHARINDEX(' ',@strs,@posicion+1)-- here it will found 1st space
set @contador = @contador+1
end
set @string1 = Left(@strs, @posicion)
set @strs = replace(@strs, @string1, '')
set @contador = 1
set @posicion = 0
while @contador <= @lon
begin
-- search for the second batch
set @posicion = CHARINDEX(' ',@strs,@posicion+1)
set @contador = @contador+1
end
set @string2 = LEFT(@strs, @posicion)
set @string3 = replace(@strs, @string2, '')
--use test
--update company_backup
--set company1=@string1,company2=@string3 where id=12
select @string1 as string1, @string2 as string2, @string3 as string3