拆分列并保留不同的数据集SQL Server

k_s*_*ltz 0 sql sql-server sql-server-2008

我有一个列,我想分成两列,只保留列中的数字.

JU_COUNT1它包含这样的数据

JU_COUNT1
1 BOLT 4 ATTACH
2 BOLT 2 ATTACH
3 BOLT 1 ATTACH
0 BOLT 3 ATTACH
2 BOLT 10 ATTACH
2 BOLT 12 ATTACH
Run Code Online (Sandbox Code Playgroud)

查询运行后,我希望它看起来像这样

BOLT    ATTACH
1         4 
2         2 
3         1 
0         3 
2        10 
2        12 
Run Code Online (Sandbox Code Playgroud)

我的SQL查询看起来像

SELECT JU_COUNT1,         
CASE
WHEN JU_COUNT1 LIKE '%ATTACH%' THEN RIGHT(JU_COUNT1, Charindex(' ', JU_COUNT1) - 1)
ELSE JU_COUNT1
END AS 'ATTACH1',
CASE
WHEN JU_COUNT1 LIKE '%BOLT%' THEN LEFT(JU_COUNT1, Charindex(' ', JU_COUNT1) - 1)
END AS 'BOLT1'
FROM [dbo].[SUPPORTSTRUCTURE]
Run Code Online (Sandbox Code Playgroud)

我能够很容易地保留BOLT,因为它是BOLT存在时数据的第一部分,但是检索attach的值正在暗示我.

Tim*_*sen 5

你可以在这里尝试的一个技巧是删除BOLTATTACH文本,然后将你想要的数据子串出来:

WITH cte AS (
    SELECT
        REPLACE(REPLACE(JU_COUNT1, 'BOLT ', ''), ' ATTACH', '') AS JU_COUNT1
    FROM [dbo].[SUPPORTSTRUCTURE]
)

SELECT
    SUBSTRING(JU_COUNT1, 1, CHARINDEX(' ', JU_COUNT1) - 1) AS BOLT,
    SUBSTRING(JU_COUNT1, CHARINDEX(' ', JU_COUNT1) + 1,
              LEN(JU_COUNT1) - CHARINDEX(' ', JU_COUNT1)) AS ATTACH
FROM cte;
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

演示