我有一个表格,其中有一列用于显示产品尺寸。
示例行:
16" L x 22" W x 6" H
22.5" L x 12" W x 9" H
我正在尝试将长度、宽度和高度放入单独的列中。我必须使用 SQL,因为这是在仅接受 SQL 语句的软件集成中使用的。我想我必须走正则表达式的路线。
获取目前数据的SQL语句
SELECT TOP 10
[ID]
,substring([SHIP_DIMENSIONS],PATINDEX('%[0-9]<em>\"%',[SHIP_DIMENSIONS]),2) as Length
,substring([SHIP_DIMENSIONS],PATINDEX('%[0-9]</em>\"%',[SHIP_DIMENSIONS]),2) as Width
,substring([SHIP_DIMENSIONS],PATINDEX('%[0-9]*\"%',[SHIP_DIMENSIONS]),2) as Height
FROM [PART]
我需要的输出是
Length | Width | Height
16 | 22 | 6
22.5 | 12 | 9
如有任何建议,我们将不胜感激。
最佳答案
一种方法如下:
select
left(dim, charindex('" L', dim)-1) as [Length]
, substring(dim, charindex('" L', dim)+6, charindex('" W', dim)-charindex('" L x ', dim) - 6) as [Width]
, substring(dim, charindex('" W', dim)+6, charindex('" H', dim)-charindex('" W x ', dim) - 6) as [Height]
from test
这个想法是寻找文本中的标记,并使用它们将字符串分割成子字符串。这种方法非常严格,因为它假设所有记录中都严格遵循示例中显示的模式,即所有标记以及空格都存在。还有一个隐含的假设,即所有尺寸均以英寸为单位。可以改变的是列的宽度。
注意:我假设您正在处理旧数据库,因此无法做正确的事情(即将维度分成单独的列)。
关于SQL Server 2008 将 1 列拆分为 3 列(运输维度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772508/