0

У меня есть следующий код, который разделяет строку на 2 части по пространству, но я хочу использовать этот код, чтобы разделить строку на 3 части вместо двух. Является ли это возможным ?Как разбить строку на 3 части в SQL Server

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 

На самом деле мне нужно скопировать данные из таблицы1 в таблицу2. Таблица 1 имеет поле «фирменное наименование», которое является varchar (120). Но таблица 2 имеет 3 поля, каждая из которых является varchar (40) «название компании1», «название компании2», «название компании3». Мне нужно разбить строку на 3 части, но логически, на основе пространства и с лимитом в 40 символов.

Например, если строка "Alufinish Gesellschaft für Verfahrenstechnik и. Цур Metalloberflächenbehandlung м.б.Х. & C"

он должен разделить, как это на основе пространства

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

+3

Каким будет ожидаемый выход? –

+0

Фактически мне нужно скопировать данные из таблицы1 в таблицу2. В таблице 1 есть поле «companyname», которое является varchar (120). Но в таблице 2 есть три поля: varchar (40) «companyname1», «companyname2», «companyname3». Поэтому мне нужно разбить строку на 3 части, но логично, исходя из пространства и с лимитом в 40 символов. Например, если строка является «LEP Loll Entlackungs-u. Pulverbeschichtungsgesellschaft mbH», она должна расколоться так: «LEP Loll Entlackungs-», «u. Pulverbeschichtungsgesellschaft», «mbH» – user2906622

+0

Это опасно ... Возьмем, например, пример того, начальное имя компании имеет длину ровно 120. Затем приведенные строки должны быть длиной ровно 40, иначе вставка не удалась. Вам должно быть повезло, чтобы пространство было ровно на 41-м и 81-м символах. –

ответ

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 
+0

Как я могу контролировать, если слова меньше 3. У меня много строк с одним словом. – user2906622

+0

В первых строках я определяю словосочетание в * palabras *. Если его два вы должны получить только * string1 * и * string2 * (поскольку * string3 * будет пустым), если его один, а * strs * - ваш единственный фрагмент строки – Zelloss

Смежные вопросы