SQL根据分隔符将一列拆分为两列

时间:2014-07-15 00:43:05

标签: sql sql-server-2008

我在一列(col)中的数据如下: 山口

Accounts::Changes
Applications::Zen::Other
Server::Access

我需要将这些数据转到两列。我想要在分隔符(:)之前的第一个字符串进入一个列(col1)和最后一个分隔符之后的最后一个字符串进入另一个列(col2)。

The output should be:
Col1                Col2
Accounts            Changes
Applications        Zen
Server              Access

我正在使用sql server 2008 R2

2 个答案:

答案 0 :(得分:2)

您应该可以使用基本字符串操作来执行此操作:

select left(col, charindex('::', col) - 1) as col1,
       right(col, charindex('::', reverse(col)) - 1) as col2
from table t;

Here是一个SQL小提琴。

答案 1 :(得分:0)

我能够达到以下目的:

select A.Col1,
 case when CHARINDEX('::',A.Colx)>0 
         then SUBSTRING(A.Colx,1,CHARINDEX('::',A.Colx)-1) 
         else A.Colx end Col2, 
    CASE WHEN CHARINDEX('::',A.Colx)>0 
         THEN SUBSTRING(A.Colx,CHARINDEX('::',A.Colx)+2,len(A.Colx))  
         ELSE NULL END as Colx3
FROM ( 
 select 
    case when CHARINDEX('::',Col)>0 
         then SUBSTRING(Col,1,CHARINDEX('::',Col)-1) 
         else Col end Col1, 
    CASE WHEN CHARINDEX('::',Col)>0 
         THEN SUBSTRING(Col,CHARINDEX('::',Col)+2,len(Col))  
         ELSE NULL END as Colx
FROM Table1 ) as A

虽然我最终得到了剩余字符串的第三列,但我不会使用它。