Parse Substring一个字符串sql

时间:2017-01-30 15:58:25

标签: 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

示例表脚本:

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')

3 个答案:

答案 0 :(得分:4)

使用charindex()进行简单解析:

rextester:http://rextester.com/KYBOZ21026

select column1=left(ColumnToParse
                ,charindex('-',ColumnToParse )-1)
              +substring(ColumnToParse
                ,charindex('.',ColumnToParse,charindex('-',ColumnToParse )+1),4)
      ,column2=substring(ColumnToParse,charindex('-',ColumnToParse )+1,1)
                +right(ColumnToParse
                ,len(ColumnToParse )
                 -charindex('.',ColumnToParse,charindex('-',ColumnToParse )+1)-3
                    )
from parsedata    

结果:

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

答案 1 :(得分:1)

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

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 

答案 2 :(得分:0)

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