2013-10-14 41 views
-1

我有以下数据的表XX创建2个记录:将字符串分割领域到表

REF  Part  DESC            Model 
1 6200050  Screw, #10-12 x 1/2" Pan HD     UC-24C UC-24CI Cosmetic 
2 7006474  Kickplate, Silver Svce      UC-24C UC-24CI Cosmetic 
3 7002139  Cover, Unit Svce       UC-24C UC-24CI Cosmetic 
4 6201270  Screw, #8-18 x 5/8" PH PN SS-Gnd    UC-24C UC-24CI Cosmetic 
6 7016528  Anti Tip Bracket - Svce - 23-7/8"    UC-24C UC-24CI Cosmetic 
7 6200780  Screw, #10-24 x 1/2" PH Hex Washer    UC-24C UC-24CI Cosmetic 

我需要做的在现场被分成两个型号之间的示范场,为每个型号创建新记录,其他所有数据相同,并将扩展数据(“化妆品”一词)留在每个记录的模型字段中。

+0

单个模型的数量总是两个? –

+0

是的。我将针对要修改的特定模型。 –

+0

是扩展数据总是一个单词(并始终存在)?换句话说,现场总是会有三个空格?如果是这样,我可以举一个例子来分析这个领域。 – Nicholai

回答

1

此解决方案仅当Model值具有以下图案Model1_Model2_SomethingElse其中_ =空间(分离器)和模型[1 | 2]不包括空格:

SELECT ..., ca.Value 
FROM dbo.MyTable t 
CROSS APPLY 
(
SELECT unpvt.ColumnValue + N' ' + unpvt.ExtendedData AS Value 
FROM (
    SELECT LEFT(t.Model, a.Idx1 - 1) AS Model1, 
      SUBSTRING(t.Model, a.Idx1 + 1, b.Idx2 - a.Idx1 - 1) AS Model2, 
      SUBSTRING(t.Model, b.Idx2 + 1, 4000) AS ExtendedData 
    FROM (VALUES (CHARINDEX(' ', t.Model))) AS a(Idx1) 
    CROSS APPLY (VALUES (CHARINDEX(' ', t.Model, a.Idx1+1))) AS b(Idx2) 
) src UNPIVOT(ColumnValue FOR ColumnType IN ([Model1], [Model2])) unpvt 
) ca 
1

这里有一个小片SQL的那将打破你的“型号”。您可以使用它作为一个过程的一部分,做你正在尝试做的...

declare @s varchar(255) 
declare @m1 varchar(255) 
declare @m2 varchar(255) 
declare @p varchar(255) 

set @s = 'UC-24C UC-24CI Cosmetic' 

SET @m1 = SUBSTRING(@s, 0, CHARINDEX(' ',@s)) 
SET @s = LTRIM(RTRIM(SUBSTRING(@s, LEN(@m1 + ' ') + 1, LEN(@s)))) 
SET @m2 = SUBSTRING(@s, 0, CHARINDEX(' ',@s)) 
SET @p = LTRIM(RTRIM(SUBSTRING(@s, LEN(@m2 + ' ') + 1, LEN(@s)))) 

SET @m1 = @m1 + ' ' + @p 
SET @m2 = @m2 + ' ' + @p 

select @m1,@m2 

结果在此:

UC-24C Cosmetic UC-24CI Cosmetic 
0

SQL Fiddle示例演示如何这可能是用下面的做:

INSERT INTO XXX (Ref, Part, Description, Model) 
SELECT Ref, Part, Description, 
Left(Model,CHARINDEX(' ', Model)) 
    + Right(Model,Len(Model)-CHARINDEX(' ', Model, CHARINDEX(' ', Model) +1)) 
FROM XXX; 

UPDATE XXX SET 
Model = Right(Model,Len(Model)-CHARINDEX(' ', Model)) 
WHERE CHARINDEX(' ', Model, CHARINDEX(' ', Model) +1)<>0 

如果您Ref领域是汽车的主键,然后就是不包括在INSERT语句中的那场。