我在同一個數據庫中有兩個表。在SQL Server中拆分一個長度爲nvarchar(120)的字符串而不會破壞單詞
表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」字段列於下面的方式打破了字分割數據:
IF公司的名稱是< = 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 [email protected],[email protected] where id=12
select @string1 as string1, @string2 as string2, @string3 as string3
這不是麥當勞,你不要在這裏點東西。我們可以幫助您解決您的問題,但首先向我們展示您嘗試的內容。 – gdoron
是的,我寫了一個代碼,但它太大了,不能寫在這裏,我的意思是大於600個字符。或者,我可以在我的問題中編寫該代碼。我的第一天加入Stackoverflow – Kamran
無論如何顯示它。 – gdoron