Sql 拆分字符串字段以在表中创建2条记录
我有一个包含以下数据的表XX:Sql 拆分字符串字段以在表中创建2条记录,sql,string,sql-server-2008,split,Sql,String,Sql Server 2008,Split,我有一个包含以下数据的表XX: 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
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
我需要做的是在字段中的两个型号之间拆分型号字段,为每个型号创建一个新记录,所有其他数据相同,并在每个记录的模型字段中保留扩展数据“示意性”一词。只有当模型值具有以下模式Model1\u Model2\u somethingels时,此解决方案才有效,其中=空格分隔符,model[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
下面是一段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
下面的示例演示了如何使用以下各项完成此操作:
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语句中包含该字段。单个型号的编号始终为两个?是的。我将针对特定的模型进行修改。扩展数据是否总是一个单词且始终存在?换句话说,字段中是否总是有三个空格?如果是这样的话,我可以举一个在这个领域分裂的例子。扩展数据中可能有多个字。