2017-01-30 10 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 
    

    あるLive Demo
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

おかげで、私は別の出力を探しています。私のソースCOLUMMの値がMASTERDATA-8.009.9.9.1であれば、私の出力はMASTERDATA.009と8.9.9.1でなければなりません。 – SuperKings

+0

あなたの近くですが、望ましい出力が得られません。ちょうど微調整が必​​要です –

+0

答えは3つのアップフォートを持っていますが、正確な結果は得られません;) –

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