2

同じデータベースに 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
4

1 に答える 1