ここにこだわっていて、どんな助けにも大いに感謝しています!@記号の前後に文字列を取り除く
R:63 WK
SQLタスク@ 0 D .ADD£400:63 RT:AT£30
1 - 取得400(記号@を見つけて、できるだけ多くの文字を取ります「見つかった」または「効率に関する
ここにこだわっていて、どんな助けにも大いに感謝しています!@記号の前後に文字列を取り除く
R:63 WK
SQLタスク@ 0 D .ADD£400:63 RT:AT£30
1 - 取得400(記号@を見つけて、できるだけ多くの文字を取ります「見つかった」または「効率に関する
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 :)
part400は空白を返します。私はそれの周りで頭を上げることはできません...試してみましたか? – elspbox
遅れて申し訳ありません。 SQL Server 2008でテストされたソリューションを編集してください。 – chungtinhlakho
ご協力いただきありがとうございます!あなたのコードに基づいて私自身の作成を終えました - とても役に立ちました、ありがとう! – elspbox
わからない」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])
パターンを探すことができる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)
約1:それはいつも@の前になりますか?もしそうなら、なぜ戻ってきたいのですか? –
@前に複数の@がある可能性がありますので、@から最も近い番号に戻る必要があります – elspbox