Sql server 解析字符串sql的子字符串

Sql server 解析字符串sql的子字符串,sql-server,Sql Server,我有一个表,其中列数据如下: MASTERDATA-8.009.9.9.1 CHILDDATA-9.007.1.1.1 MASTERDATA-2.003.1.1.2 我希望输出为两列: COlumn1 Column2 MASTERDATA.009 8.9.9.1 CHILDDATA.007 9.1.1.1 MASTERDATA.003 2.1.1.2 示例表脚本: Cr

我有一个表,其中列数据如下:

MASTERDATA-8.009.9.9.1    
CHILDDATA-9.007.1.1.1      
MASTERDATA-2.003.1.1.2
我希望输出为两列:

COlumn1               Column2           
MASTERDATA.009        8.9.9.1     
CHILDDATA.007        9.1.1.1  
MASTERDATA.003       2.1.1.2
示例表脚本:

Create Table ParseData
(
ColumnToParse Varchar(50)
)

Insert into ParseData values('MASTERDATA-8.009.9.9.1')
Insert into ParseData values('CHILDDATA-9.007.1.1.1')
Insert into ParseData values('MASTERDATA-2.003.1.1.2')
对于简单的解析,请使用:

雷克斯测试仪:

结果:

+----------------+---------+
|    column1     | column2 |
+----------------+---------+
| MASTERDATA.009 | 8.9.9.1 |
| CHILDDATA.007  | 9.1.1.1 |
| MASTERDATA.003 | 2.1.1.2 |
+----------------+---------+

考虑到所有记录的格式相似。下面是使用字符串函数的一种方法

SELECT column1 = LEFT(ColumnToParse, Charindex('-', ColumnToParse) - 1)
                 + Substring(ColumnToParse, Charindex('.', ColumnToParse), Charindex('.', ColumnToParse, Charindex('.', ColumnToParse)+1 ) - Charindex('.', ColumnToParse) ),
       column2 = Substring(ColumnToParse, Charindex('-', ColumnToParse)+1, Charindex('.', ColumnToParse) - Charindex('-', ColumnToParse) )
                 + RIGHT(ColumnToParse, Len(ColumnToParse)- Charindex('.', ColumnToParse, Charindex('.', ColumnToParse)+1 ))
FROM   ParseData 

谢谢,但我正在寻找不同的输出。如果我的源列值为MASTERDATA-8.009.9.9.1,则我的输出应为MASTERDATA.009和8.9.9.1,但不会产生所需的输出。。只是需要调整一下,只是想知道这个答案是如何获得3票赞成票的,尽管它没有产生确切的结果;)@prdp问得好,可能人们做出了与我相同的假设,但对这个问题没有双重理解。我不是落选者;)现在投票支持正确答案:)
select left(ColumnToParse, CHARINDEX('-', ColumnToParse) ) + 
    substring(columntoparse, CHARINDEX('-', ColumnToParse)+1,5) as Column1
    , right(replace(columntoparse,substring(columntoparse, 
    CHARINDEX('-', ColumnToParse)+2,4),''),7) as Column2
from ParseData
SELECT column1 = LEFT(ColumnToParse, Charindex('-', ColumnToParse) - 1)
                 + Substring(ColumnToParse, Charindex('.', ColumnToParse), Charindex('.', ColumnToParse, Charindex('.', ColumnToParse)+1 ) - Charindex('.', ColumnToParse) ),
       column2 = Substring(ColumnToParse, Charindex('-', ColumnToParse)+1, Charindex('.', ColumnToParse) - Charindex('-', ColumnToParse) )
                 + RIGHT(ColumnToParse, Len(ColumnToParse)- Charindex('.', ColumnToParse, Charindex('.', ColumnToParse)+1 ))
FROM   ParseData