如何将范围字符串拆分为表格

时间:2016-07-03 15:10:05

标签: sql sql-server sql-server-2008 split

我可以在sql server中为此运行,但我只获得宽度列(w_pacakaging),但我不知道从列填充列表文本中写入获取值长度或高值

DATA    Packing list text    W_packaging          Length        High                  
          38"x45"x44"           38

我的代码是

select [Packing list text],[Grade],[sales doc no], 
 case when [Packing list text] like'%:%' then 
  cast(Ltrim(Rtrim(SUBSTRING([Packing list text], charindex(':', [Packing list text]) + 1, charindex('"', [Packing list text])  

  - (charindex(':', [Packing list text]) + 1)))) as [nvarchar] ) 
                       END AS [W_packaging] 
 from [TPC_CRSYS].[dbo].[TotalOrder_Export]  

The result

结果显示我只能分割范围到宽度,但长度和高列我不知道如何编写代码来分割它。有没有办法将范围的数量分成长度和高?

1 个答案:

答案 0 :(得分:0)

此方法可让您提取尺寸类型安全:

作为第一步,我在:处剪切了字符串,并对其余字符串执行了一些字符串操作。 26"x36"x42"已更改为<x>26</x><x>36</x><x>42</x>。这是XML,可以使用.value()轻松查询。 int作为第二个参数返回一个类型化的int值...

DECLARE @s VARCHAR(100)='@ 21 REAMS x 24 PAELLETSDIMENSION (WXLXH):26"x36"x42"';

WITH MyDimenstions AS
( 
    SELECT CAST('<x>' + REPLACE(REPLACE(SUBSTRING(@s,CHARINDEX(':',@s)+1,1000),'"x','</x><x>'),'"','')+'</x>' AS XML) AS Dims
)
SELECT Dims.value('/x[1]','int') AS [Width] 
      ,Dims.value('/x[2]','int') AS [Length]
      ,Dims.value('/x[3]','int') AS [Height]
FROM MyDimenstions

结果

Width   Length  Height
26      36      42

更新

我理解您的评论,您不知道如何将此方法转换为基于表格的数据。试试这样:

DECLARE @tbl TABLE(s VARCHAR(100));
INSERT INTO @tbl VALUES
 ('@ 21 REAMS x 24 PAELLETSDIMENSION (WXLXH):26"x36"x42"')
,('@ 22 REAMS x 42 PAELLETSDIMENSION (WXLXH):1"x11"x111"');

WITH MyDimenstions AS
( 
    SELECT CAST('<x>' + REPLACE(REPLACE(SUBSTRING(s,CHARINDEX(':',s)+1,1000),'"x','</x><x>'),'"','')+'</x>' AS XML) AS Dims
    FROM @tbl
)
SELECT Dims.value('/x[1]','int') AS [Width] 
      ,Dims.value('/x[2]','int') AS [Length]
      ,Dims.value('/x[3]','int') AS [Height]
FROM MyDimenstions