2017-01-30 41 views
2

我有一個表,如下一列數據:解析子串一串SQL

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

回答

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 
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 | 
+----------------+---------+ 
+0

謝謝,但我正在尋找一個不同的輸出。如果我的源COlumn的值是MASTERDATA-8.009.9.9.1,那麼我的輸出應該是MASTERDATA.009和8.9.9.1 – SuperKings

+0

你近,但不會產生所需的輸出..只需要調整 –

+0

只是想知道這是如何回答得到3 upvotes,雖然它不產生確切的結果;) –

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