管道分隔信息列

时间:2013-12-27 16:32:26

标签: sql sql-server sql-server-2012

我有这个以管道分隔的列。

ID         Col1
1000        Class1|Sec2|Tom|Brady
1001        Class1|Sec2|Row4|Tim|Tebow
1002        Class2|Sec2|Row3|Huck|Fin
1003        Class2|Sec2|Tom|Sawyer
1004        Class10|Sec1|Rowq|sa|

现在我怎样才能在最后一个管道之后获取名称。

O / P

 ID         Col1
1000        Brady
1001        Tebow
1002        Fin
1003        Sawyer
1004        

任何人都可以帮我解决这个问题。

由于

2 个答案:

答案 0 :(得分:3)

从不,永远不会在一列中存储多个值!

就像你现在看到的那样,这只会让你感到头痛。规范化你的表格。看起来应该是这样的

ID     Class   Section   Firstname   Lastname
1000   Class1  Sec2      Tom         Brady

答案 1 :(得分:1)

1)我希望这个表是一个临时表

2)尝试此查询:

SELECT ID,
    CASE WHEN Col1 LIKE N'%|%|%|%' 
    THEN CONVERT(XML, N'<row>' + REPLACE(Col1, N'|', N'</row><row>') + N'</row>').value('(row)[4]','NVARCHAR(50)')
    END
FROM dbo.MYTABLE

注意:您应该用适当的数据类型和最大值替换NVARCHAR(50)。长度。