我有以下代码,根据空格将字符串拆分为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具有字段“ companyname ”,即varchar(120)。但是table2有3个字段,每个字段是varchar(40)“ companyname1 ”,“ companyname2 ”,“ companyname3 ”。我需要将字符串分成3个部分,但是以逻辑方式,基于空格和限制为40个字符。
例如,如果一个字符串是“ AlufinishGesellschaftfürVerfahrenstechniku.zurMetalloberflächenbehandlungmbH& C ”
它应该在空间的基础上这样分裂
“ AlufinishGesellschaftfür” “ Verfahrenstechnik u.zur * ” “ *MetalloberflächenbehandlungmbH& C ”
答案 0 :(得分: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