2017-06-21 13 views
0

文字列を分割してスペースの後の値を取得したいと考えています。私はスペースの前に値を得ることができますが、スペースの後に文字列を取得する方法。スペースの後の部分文字列

DECLARE @string varchar(20) 
SELECT @string = 'Test Name' 
SELECT SUBSTRING(@string, 0, CHARINDEX(' ', @string)) 

ご協力いただきありがとうございます。

編集:私は、部分文字列を使用しますが、string_splitを使用しないでください

+0

に基づいて選択するために、文字列の長さを取得しますが、あなたは常に2つの部分を持っていますか(1スペース)、または選択した文字が出現するたびに文字列を分割したいですか?複数のスペースはどうですか? – Pred

答えて

4

はここで前のSQL Server 2016へのSQL ServerのバージョンのSUBSTRINGCHARINDEXを使用したバージョンですSTRING_SPLITが導入されました。次の作品の

次のいずれかの

SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, 20) 

SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1) 

編集は、私たちが表す数値を返しCHARINDEXを(使用しての領域の位置を見つける必要があるラオさんのコメント

ごとに説明を追加しますスペースの後ろで選択したい文字列が始まるので、開始位置がCHARINDEX( ''、@)になるようにSUBSTRINGの開始位置に1(+1)を加えなければなりません。文字列)+ 1

SUBSTRINGの3番目の引数は、選択する文字列の長さです。最初のケースでは、varchar(20)で指定した文字列が20文字を超えないため、20文字を使用すると仮定します。注意SUBSTRING文字列の最後を過ぎて文字を選択しようとしないので、残っている文字数より長い長さを指定することは安全です。

私の第二の例は、それ私たちの選択の前に、全文字列(DATALENGTH)の長さを引いた文字の数である(CHARINDEX + 1)

+0

ありがとうございました。もしあなたが気にしなければ、それはどのように機能するのか説明することができます。最初のクエリでは「+1」と20、2番目のクエリでもお待ちください。 – BRDroid

+0

@Rao更新された回答を参照 –

+0

ありがとう – BRDroid

0

のSQLServer 2012を使用しています。これは文字列の配列を返します。

SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' '); 

これは、次の配列を返します。

Lorem 
ipsum 
dolor 
sit 
amet. 

詳しい情報はここで見つけることができます:https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql

+0

応答していただきありがとうございますが、私はSQLServer 2012を使用しています。私の欠点は私の質問では言及していません。 – BRDroid

関連する問題