SQL Server 2008 将 1 列拆分为 3 列(运输维度)

标签 sql sql-server regex sql-server-2008

我有一个表格,其中有一列用于显示产品尺寸。

示例行: 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

这个想法是寻找文本中的标记,并使用它们将字符串分割成子字符串。这种方法非常严格,因为它假设所有记录中都严格遵循示例中显示的模式,即所有标记以及空格都存在。还有一个隐含的假设,即所有尺寸均以英寸为单位。可以改变的是列的宽度。

Demo.

注意:我假设您正在处理旧数据库,因此无法做正确的事情(即将维度分成单独的列)。

关于SQL Server 2008 将 1 列拆分为 3 列(运输维度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25772508/

相关文章:

php - 使用可选参数构建 SQL 语句

mysql - 如何删除最旧的mysql表记录,但保留1000条最新记录

sql-server - 如何将数据从 SQL Server 传输到 Excel

sql - 如何从sql server中的子元素中删除空命名空间

sql - 如何在 SQL WHERE 子句中连接字符串

javascript - 从另一个正则表达式中排除一个正则表达式

sql - SQL Server 2008 中的条件 WHERE 子句

c# - 在 .Net 中查找并替换 JSON 响应中的字符串

javascript - 使用 Javascript 将 <pre> 中的内容放入数组中

sql - 这两个查询之间会有性能差异吗?