Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用列值拆分提取表数据_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

Sql server 使用列值拆分提取表数据

Sql server 使用列值拆分提取表数据,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我有一个数据表 col1 col2 col3 col4 11 12 xx yy 20 22 13 qq aa 21 我的TDD需要使用TSQL作为 col1 col2 col3 col4 11 12 xx 20 11 12 yy 20 22 13 qq 21 22 13 aa

我有一个数据表

col1    col2    col3   col4
11       12     xx yy    20
22       13     qq aa    21
我的TDD需要使用TSQL作为

col1     col2    col3    col4
11       12       xx      20
11       12       yy      20
22       13       qq      21
22       13       aa      21
基本上,col3具有带空格的值,需要为每个按空格值分隔的值创建行

谢谢
prav

看看这样的东西

DECLARE @Table TABLE(
        col1 INT,
        col2 INT,
        col3 VARCHAR(50),
        col4 INT
)

INSERT INTO @Table SELECT  11,12,'xx yy',20  
INSERT INTO @Table SELECT  22,13,'qq aa',21

;WITH Vals AS (
    SELECT  *,
            CAST('<d>' + REPLACE(col3, ' ', '</d><d>') + '</d>' AS XML) XMLCol
    FROM    @Table
)
SELECT  Vals.*,
        T.split.value('.', 'VARCHAR(MAX)') SplitValue
FROM    Vals
CROSS APPLY
        XMLCol.nodes('/d') T(split)

第三列是否一致?两个字符后跟一个空格,然后再加两个字符?如果是这样的话,那么您的解决方案就相当简单了——使用第三列的子字符串进行两次插入。如果没有,您将不得不做一些更复杂的事情——比如使用计数表来查找空间两边的值。我对XML不够了解,不知道它是否按照您的方式编译和运行,但是如果确实如此——那么做得很好!