如何在SQL Server中拆分3个字符串

时间:2013-10-24 07:32:50

标签: sql sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我有以下代码,根据空格将字符串拆分为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

1 个答案:

答案 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