0

我有以下代码,它根据空间将字符串拆分为 2 段,但我想使用此代码将字符串拆分为 3 段而不是 2 段。可能吗 ?

declare @strs nvarchar(max)

set @strs = 'Twinkle Twinkle Little Star, How I wounder what you are.'

set @strs = reverse(@strs)

select reverse(@strs) String,

reverse(right(@strs,len(@strs) - charindex(' ',@strs,30))) Description1,

ltrim(reverse(left(@strs,charindex(' ',@strs,30)))) Description2

实际上我必须将数据从 table1 复制到 table2。表 1 具有字段“公司名称”,即 varchar(120)。但是 table2 有 3 个字段,每个字段是 varchar(40)" companyname1 ", " companyname2 "," companyname3 ”。我需要将字符串分成 3 部分,但要以合乎逻辑的方式,基于空间和 40 个字符的限制。

例如,如果字符串是“ Alufinish Gesellschaft für Verfahrenstechnik u. zur Metalloberflächenbehandlung mbH & C

它应该在空间的基础上像这样分裂

" Alufinish Gesellschaft für " " Verfahrenstechnik u. zur * " " *Metalloberflächenbehandlung mbH & C "

4

1 回答 1

0

有点“蛮力”的方法..也许您应该封装在一个函数中,并且绝对需要控制字符串中是否少于三个单词,但这应该可行。

declare @strs nvarchar(max)

set @strs = 'Twinkle Twinkle Little Star, How I wonder what you are. High above noseque sky high'
declare @lon int
declare @palabras int
declare @contador int
declare @posicion int
declare @string1 varchar(max)
declare @string2 varchar(max)
declare @string3 varchar(max)

--wordcount
set @palabras = LEN(@strs)-LEN(replace(@strs, ' ', ''))+1
--words per batch
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)
    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, '')

select @string1, @string2, @string3
于 2013-10-24T08:59:36.617 回答