2016-09-01 28 views
0

私は以下のような文字列を持っています。文字列には常に存在します。TSQLは文字列から番号を取り除きます

'NAB 12345トム見出し[email protected]ウェブ20294821.オーストラリア正規ポスト'

がどのようにTSQLを使用して上記の文字列から20294821を取り除くのですか?

私は以下を試みたが、可能な文字列パターンは、ここで私が入れている、一定ではないので数は、文字列

REPLACE(REVERSE(LEFT(REVERSE(Comments), CHARINDEX(' ', REVERSE(Comments))-1)) ,'.','') 

-Alan-

+0

は数がスペースとドットの間で常に削除されますか? – ydoow

+0

ソースデータに応じて、スペースを数えるだけのベストタイムがあります。期間はユニークではなく、おそらく変わる可能性があります(電子メール)。名前部分のスペースが変わる可能性があるかどうかは不明です(人は最初の名前、複数の名前の姓/名、または名前を1つだけ入力します)。あなたのデータの他の部分はどのくらい一定ですか? –

+0

@ydoowパターン "Web xxxxxxx"いつもそこにいる.. –

答えて

1

することができます以下のように:

DECLARE @Comments as VARCHAR(255) = 'NAB 12345 Tom Heading [email protected] Web 20294821. Australia Regular Post' 

SELECT REPLACE(@Comments, LEFT(RIGHT(@Comments, LEN(@Comments) - CHARINDEX('Web ', @Comments, 0) - 3), CHARINDEX('.', RIGHT(@Comments, LEN(@Comments) - CHARINDEX('Web ', @Comments, 0) - 3), 0) - 1), '') 
0

で最後の単語である場合にのみ動作しますこの答えは、最も右のドット.dotの左側の最も近いスペースの間の文字列を削除することを前提としています。

DECLARE @Comments VARCHAR (MAX) 
SET @Comments = 'NAB 12345 Tom Heading [email protected] Web 20294821. Australia Regular Post' 

DECLARE @Comments_TrimmedContent VARCHAR (MAX) 
DECLARE @Comments_TrimmedAfterDot VARCHAR (MAX) 
SELECT @Comments_TrimmedContent = REVERSE(LEFT(REVERSE(@Comments), CHARINDEX('.', REVERSE(@Comments)))) 
SELECT @Comments_TrimmedAfterDot = REVERSE(RIGHT(REVERSE(@Comments), LEN(@Comments) - CHARINDEX('.', REVERSE(@Comments)) - 1)) 

SELECT REVERSE(RIGHT (REVERSE(@Comments_TrimmedAfterDot), LEN(@Comments_TrimmedAfterDot) - CHARINDEX(' ', REVERSE(@Comments_TrimmedAfterDot)))) + @Comments_TrimmedContent 

出力:

NAB 12345 Tom Heading [email protected] Web. Australia Regular Post 
0

最後の行は、最終的な答えを持っていますが、私は物事はもう少し一貫性にするために手順を分解しました。

最初のWebスペースと完全停止の間の値を戻します。また

DECLARE @Comments as VARCHAR(255) 

SET @Comments = 'NAB 12345 Tom Heading [email protected] Web 20294821. Australia Regular Post' 

SELECT @Comments 

-- Assume there is only one occurence of web and a space 
SELECT CHARINDEX('Web ', @Comments) 

--Show the substring starting from the number (skip for 4 characters for web and a space) 
SELECT SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, LEN(@Comments)) 

--Find the full stop after the web space 
SELECT CHARINDEX('.', SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, LEN(@Comments))) 

--Combine all of the above logic to give the answer 
SELECT SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, CHARINDEX('.', SUBSTRING(@Comments, CHARINDEX('Web ', @Comments) + 4, LEN(@Comments)))-1) 
関連する問題