我不确定这是否可以在SQL Server中完成。如果可能的话,有人可以帮我一下吗?
我有一个数据表如下:
DECLARE @MYTABLE TABLE
(
ColumnA VARCHAR (50)
)
INSERT INTO @MYTABLE
SELECT '01268 591558 * 3 Marina' UNION ALL
SELECT '01322 421980 JULIE A/P' UNION ALL
SELECT '01296620096 BR TAKES CARD EOM' UNION ALL
SELECT '07547 740863/07986 019852' UNION ALL
SELECT '07754553528 - TIM' UNION ALL
SELECT '07732418595 sam' UNION ALL
SELECT '01793 425574- Charlotte' UNION ALL
SELECT '01268 591558 * 3 Marina' UNION ALL
SELECT '07967 967404 CELIA' UNION ALL
SELECT '0208 361 1213 / 1433 /8899 ' UNION ALL
SELECT '0208 361 1213 / 1433 ' UNION ALL
SELECT '0208 361 1213 / 1433' UNION ALL
SELECT '01206 578671 / 564272' UNION ALL
SELECT '01206735561/07748116152' UNION ALL
SELECT '0208 361 1213 / 1433 ' UNION ALL
SELECT '01234 754047 SUE' UNION ALL
SELECT '01206735561/07748116152/0156589'
我希望输出像
有人可以帮帮我吗?
由于
答案 0 :(得分:1)
使用样本数据,但存在一些潜在的缺陷。
目前,XML将分为9个职位(易于扩展或收缩)。
显然,如果需要,您可以添加更多ColumnX。只需按照模式
示例强>
Select A.*
,Column1 = left(Pos1,11)
,Column2 = case when Try_Convert(float,Pos2) is null then null else Left(Pos1,11-Len(Pos2))+Pos2 end
,Column3 = case when Try_Convert(float,Pos3) is null then null else Left(Pos1,11-Len(Pos3))+Pos3 end
From @MYTABLE A
Cross Apply (
Select Pos1 = ltrim(rtrim(xDim.value('/x[1]','varchar(max)')))
,Pos2 = ltrim(rtrim(xDim.value('/x[2]','varchar(max)')))
,Pos3 = ltrim(rtrim(xDim.value('/x[3]','varchar(max)')))
,Pos4 = ltrim(rtrim(xDim.value('/x[4]','varchar(max)')))
,Pos5 = ltrim(rtrim(xDim.value('/x[5]','varchar(max)')))
,Pos6 = ltrim(rtrim(xDim.value('/x[6]','varchar(max)')))
,Pos7 = ltrim(rtrim(xDim.value('/x[7]','varchar(max)')))
,Pos8 = ltrim(rtrim(xDim.value('/x[8]','varchar(max)')))
,Pos9 = ltrim(rtrim(xDim.value('/x[9]','varchar(max)')))
From (Select Cast('<x>' + replace((Select replace(replace(A.ColumnA,' ',''),'/','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml) as xDim) as C
) B
<强>返回强>