2016-06-02 7 views
1

ここにこだわっていて、どんな助けにも大いに感謝しています!@記号の前後に文字列を取り除く

R:63 WK

SQLタスク@ 0 D .ADD£400:63 RT:AT£30

1 - 取得400(記号@を見つけて、できるだけ多くの文字を取ります「見つかった」または「効率に関する

+0

約1:それはいつも@の前になりますか?もしそうなら、なぜ戻ってきたいのですか? –

+0

@前に複数の@がある可能性がありますので、@から最も近い番号に戻る必要があります – elspbox

答えて

1

charIndexと部分文字列を使用してください。以下の例では、@の後に£があると仮定しています。基本的には、@で文字列を分割し、2番目の部分では、@から ''に行きます。最初の部分は、それを予約し、£を見つけて、それを元に戻します。

declare @col varchar(500) 
set @col = 'R:£30 AT:63 RT:0 D .ADD £400 @63 WK' 
declare @p1 varchar(500),@p2 varchar(500) --split col into 2 at @ 


set @p1 = (reverse(substring(@col,1,CHARINDEX('@',@col)-1))) -- i will reverse here 
set @p2 = (substring(@col,CHARINDEX('@',@col)+1,LEN(@col))) 


select @p1 p1, @p2 p2 
    ,ltrim(rtrim(reverse(substring(@p1,1,CHARINDEX('£',@p1)-1)))) p1Final -- do the same thing as we did to p1 and reserse it 
    --also do a trim left and right to get rid of extra spaces 
    ,ltrim(rtrim(SUBSTRING(@p2,1,charIndex(' ',@p2)))) p2Final --this one should be self explanatory if you get the first one :) 
+0

part400は空白を返します。私はそれの周りで頭を上げることはできません...試してみましたか? – elspbox

+0

遅れて申し訳ありません。 SQL Server 2008でテストされたソリューションを編集してください。 – chungtinhlakho

+0

ご協力いただきありがとうございます!あなたのコードに基づいて私自身の作成を終えました - とても役に立ちました、ありがとう! – elspbox

0

わからない」Wまで(@記号を検索し、できるだけ多くの文字を取得する63を取得していますが、STA取得する -

2)に達し£記号まで、左に行きます1について

をRTED:私は、文字列を逆にし、それを操作して、(私はあなたがスペースがない場合にのみ、Wを探すために必要があると仮定)2のバック

declare @s varchar(500) = 'R:£30 AT:63 RT:0 D .ADD £23 £400 @63 WK' 
declare @sRev varchar(500) = REVERSE(@s) 
declare @stemp varchar(500) 

declare @ampIndRev int, @AfterAmpIndRev int 
set @ampIndRev = CHARINDEX('@',@sRev,1) 

set @AfterAmpIndRev = charindex('£',@sRev, @ampIndRev) 

set @stemp = SUBSTRING(@sRev, @ampIndRev + 1, @[email protected]) 

set @stemp = REVERSE(Ltrim(@stemp)) 
select @stemp 

結果を逆転さ:

declare @s varchar(500) = 'R:£30 AT:63 RT:0 D .ADD £400 @63 WK' 
declare @ampInd int, @AfterAmpInd int 
set @ampInd = CHARINDEX('@',@s,1) 

set @AfterAmpInd = CHARINDEX(' ',@s,@ampInd) 
if @AfterAmpInd = 0 
    set @AfterAmpInd = CHARINDEX('W',@s,@ampInd) 

select SUBSTRING(@s, @ampInd + 1, @[email protected]) 
1

パターンを探すことができるpatindex関数を使用することもできます。

declare @col varchar(50) 
set @col='R:£30 AT:63 RT:0 D .ADD £400 @63 WK' 

--400 
select substring(@col,patindex('% £% @%',@col)+2,charindex('@',@col)-(patindex('% £% @%',@col)+3)) 

--63 
select substring(@col,charindex('@',@col)+1,charindex(' ',reverse(@col))-1) 
関連する問題