我在同一个数据库中有两个表。
表 1,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”字段中的数据:
如果公司名称 <=40,则不要拆分。
如果公司名称 >40 且 <=80,则将其分成两部分而不破坏单词。
如果公司名称 >80 且 <=120,则将其分成三部分而不破坏单词。
我正在使用以下代码,但它没有正确生成结果。例如,在下面的代码中,我将 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