我需要将列拆分为3个不同的列

时间:2014-08-14 14:18:42

标签: sql-server-2008

我有一个列的值为'150/250/555','114/1254/5241','45127/521/102'。所以这样我有一个专栏。现在我需要将此列拆分为三个不同的列。比如说'150/250/555',我需要将150个值分成一列,250个分成另一列,同样555分成第3列。

我使用此查询获得了第一列:

select substring(elt.EMPLR_LIAB_TYP_NM,1,CHARINDEX('/',elt.EMPLR_LIAB_TYP_NM)-1)
From EMPLOYER_LIABILITY_TYPE elt

此查询成功地为我提供了第一列的值,在示例'150/250/555'中为150.

但我很困惑如何为第2和第3列做到这一点,它应该在'/'之后获得第2列中的值250和第3列中的第55列中的555。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

Sqlserver的charindex()函数有一个可选的第3个参数,用于指定搜索的起始字符。您可以使用它在您找到上一个分隔符之后开始搜索一个字符。

select
    substring(EMPLR_LIAB_TYP_NM, 1, CHARINDEX('/',EMPLR_LIAB_TYP_NM)-1) col1,
    substring(EMPLR_LIAB_TYP_NM, CHARINDEX('/',EMPLR_LIAB_TYP_NM)+1,
        CHARINDEX('/', EMPLR_LIAB_TYP_NM, CHARINDEX('/', EMPLR_LIAB_TYP_NM) + 1) - CHARINDEX('/',EMPLR_LIAB_TYP_NM) - 1) col2,
    reverse(substring(reverse(EMPLR_LIAB_TYP_NM),1,CHARINDEX('/',reverse(EMPLR_LIAB_TYP_NM))-1)) col3
from EMPLOYER_LIABILITY_TYPE

请参阅SQLFiddle

由于SQLServer缺少split()功能,这有点像怪物。我使用reverse()来允许第一列表达式的版本用于结束列(而不是对charindex()进行更多嵌套调用)。