【问题标题】:How to do you split a range string to a table如何将范围字符串拆分为表格
【发布时间】:2016-07-03 15:10:04
【问题描述】:

我可以为此在 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

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

【问题讨论】:

  • 您的示例文本没有冒号。为什么在你的代码中?
  • SQL-Server 的哪个版本? 2016 年提供原生字符串拆分支持...
  • 我使用 sql 版本 2008,有没有办法将范围数拆分为 Length 和 High?

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


【解决方案1】:

这种方法允许您安全地提取尺寸类型:

作为第一步,我在: 处剪断字符串,然后对其余部分执行一些字符串操作。 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

【讨论】:

  • 代码很棒,但是如果我想要@s VARCHAR(100) from select [Packing list text] from [dbo].[TotalOrder_Export],有什么办法吗?
  • 没关系@Shnugo,但如果我想在我的数据库中的每一行(有10,000行)中计算(x),它显示在下面[数据:X“X”,400 REMS x 946 PALLETS1 ,32"x44"x42" 结果 : 2 , 1 , 3 有没有计算得到 x 的计数?
  • 嗨@monte,因为你是新来的(顺便说一句:欢迎!)请给我一个提示:将问题紧密分开是SO的一个原则。一个问题,一个解决方案。您的另一个问题是一个新问题。所以:通过勾选答案投票计数器下方的接受检查来关闭此问题。然后为您的新问题开始一个新问题并在此处放置一个链接。我很快就会到那里。优点:新问题更有吸引力,为你我加分,为寻找类似问题的追随者提供更好的点击率。谢谢,祝编程愉快!
猜你喜欢
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多