我有一个包含列数据的表格如下:
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')
答案 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