我可以在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]
结果显示我只能分割范围到宽度,但长度和高列我不知道如何编写代码来分割它。有没有办法将范围的数量分成长度和高?
答案 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