2016-06-24 7 views
1

私はちょうど数値の位置と部分文字列を使用する以外のより良い方法を解析するために見つけることができない多少ファンキーな文字列を持っています。SQLパースストリングは、より良い方法になっています

この文字列を分割する方がよいでしょうか?

Declare @EXTERNAL_KEY Varchar(100) = 'ABC_2015SP_DEFG1321.088TR' 

Print Substring(@EXTERNAL_KEY,CHARINDEX('_',@EXTERNAL_KEY)+8,4)+' '+Replace(Substring(@EXTERNAL_KEY,CHARINDEX('_',@EXTERNAL_KEY)+12,8),'.',' ')+' '+Substring(@EXTERNAL_KEY,CHARINDEX('_',@EXTERNAL_KEY)+20,2) 

私は達成するために期待しています最終結果:

DEFG 1321 088 TR 
+0

を前提とフォーマットが固​​定されていますか? –

+0

はい私はそう信じています。 – BlueBird

答えて

1

をあなたのフォーマットが固​​定されている場合は、静的なインデックスを回避するために'PARSENAME''LEFT''RIGHT'機能を使用してみてください

DECLARE @Str NVARCHAR(MAX)='ABC_2015SP_DEFG1321.088TR' 
SELECT LEFT(PARSENAME(REPLACE(@Str,'_','.'),2),4)+' '+RIGHT(PARSENAME(REPLACE(@Str,'_','.'),2),4)+' '+LEFT(PARSENAME(REPLACE(@Str,'_','.'),1),3)+' '+RIGHT(PARSENAME(REPLACE(@Str,'_','.'),1),2) 
3

ます使用可能STUFF + PARSENAME + REPLACE

SELECT STUFF(PARSENAME(REPLACE(@EXTERNAL_KEY,'_','.'),2),5,0,' ') +' '+ STUFF(PARSENAME(@EXTERNAL_KEY,1),4,0,' ') 

出力:

DEFG 1321 088 TR 
2

固定フォーマットは

Declare @EXTERNAL_KEY Varchar(100) = 'ABC_2015SP_DEFG1321.088TR'; 
select stuff(stuff(replace(right(@EXTERNAL_KEY,14), '.', ' ') ,13,0,' '), 5,0,' ') 
関連する問題