我有一个带有 ITEM 列的 ITEM 表。他们都是一串。此列中的一些示例产品可能是:
AAA-BBB-CCC.B.S
AAA-BBB-CCC.B.M
BAA-123A-DDDD.01.28
BAA-123A-DDDD.20.28
CCC-AACD-CCDD.MB.28.L
CCC-AACD-CCDD.MB.29.L
CCC-AACD-CCDD.FC.28.R
CCC-AACD-CCDD.FC.29.R
我想将这些元素分成单独的列,但由于“不总是存在”的项目适合属性,以及试图将数据分开的“在 x 之后但在 y 之前”的性质,我正在努力。到目前为止,我已经得到了以下内容,它获取了项目大小,但是如果有合适的礼物,那么它会得到它,这使得它不是很有用。
这是在 SQL Server Management Studio 2016 中。
SELECT ITEM
,RIGHT(ITEM, CHARINDEX('.',REVERSE(ITEM)) -1) 'Size'
FROM ITEM
这是解析和创建列的一种方法。然而,你让我失去了哪个元素是什么。
例子
Declare @YourTable table (ID int,Item varchar(100))
Insert Into @YourTable values
(1,'AAA-BBB-CCC.B.S'),
(2,'AAA-BBB-CCC.B.M'),
(3,'BAA-123A-DDDD.01.28'),
(4,'BAA-123A-DDDD.20.28'),
(5,'CCC-AACD-CCDD.MB.28.L'),
(6,'CCC-AACD-CCDD.MB.29.L'),
(7,'CCC-AACD-CCDD.FC.28.R'),
(8,'CCC-AACD-CCDD.FC.29.R')
Select A.ID
,B.*
From @YourTable A
Cross Apply (
Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
From (Select Cast('<x>' + replace((Select replace(replace(A.Item,'.','-'),'-','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as A
) B
退货
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句