• 締切済み

SQLServerで文字列の末尾からある位置で取出

SQLServer2012で selectで文字列の末尾から(右から)ある文字の位置までを取り出したいのですが どのようなSQLにすればよいのでしょうか。 やりたいことは、 例えば、文字列「abc 123 xyz」があるとします。 末尾から(右から)見て、最初に見つかった半角スペースから後ろ「xyzを取り出し たいです。 RIGHT を使えば取り出すことはできるのですが、取り出したい文字列の長さが同じ でないので使うことができません。 お願いします。

みんなの回答

  • innoya
  • ベストアンサー率71% (10/14)
回答No.4

こんにちは。 あぁ。空白が入っていましたね。 下記のように-1をしてください。 Ltrimを使うよりいいです。 DECLARE @Str VARCHAR(100) SET @Str = 'abc 123 xyz' SELECT RIGHT(@Str,CHARINDEX(' ',REVERSE(@Str))-1) SET @Str = 'abcxcvzx 123456 xyzsdf' SELECT RIGHT(@Str,CHARINDEX(' ',REVERSE(@Str))-1) また下記の質問の件ですが、 >> CHARINDEXで検索文字列を「123」とすると結果が得られ >> ないのですが、REVERSE関数により反転してしまっている >> からですか。 そうですね。REVERSE関数により検索ができなかったからです。 どんなデータでどんなデータを得られたいかをもっと詳しく教えて頂ければ、 答えするのに助かりますが。。。 よろしくお願いします。

abc999xyz
質問者

お礼

ありがとうございます。 返事が遅くなりましたが、 データとしては 部署名△チーム名△UP△社員番号 部署名△チーム名△DW△社員番号 部署名△チーム名△協力者社員番号 部署名△チーム名△社員番号 : : 部署名△チーム名△UP△社員番号 部署名△チーム名△DW△社員番号 ※△=半角スペース 日本語は、実際には、値が入っています。 の様なデータから 獲たいデータは、 UP△社員番号 DW△社員番号 協力者社員番号 社員番号 を取り出したいのです

  • innoya
  • ベストアンサー率71% (10/14)
回答No.3

こんにちは。 REVERSE関数を使えばできます。 下記のSQLを実行してみてください。 DECLARE @Str VARCHAR(100) SET @Str = 'abc 123 xyz' SELECT RIGHT(@Str,CHARINDEX(' ',REVERSE(@Str))) SET @Str = 'abcxcvzx 123456 xyzsdf' SELECT RIGHT(@Str,CHARINDEX(' ',REVERSE(@Str))) よろしくお願いします。

abc999xyz
質問者

お礼

ありがとうございます。 REVERSE関数があるとは知りませんでした。 取り出しはできたのですが、半角スペースが残るのですね。 LTRIM で消せました。 CHARINDEXで検索文字列を「123」とすると結果が得られ ないのですが、REVERSE関数により反転してしまっている からですか。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

Strrev関数で、最初のスペースまで拾ってまたstrrev

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

DECLARE @WORD1 VAERCHAR(100) SET @WORD = 'abc 123 xyz' SELECT RIGHT(@WORD,LEN(@WORD) - CHARINDEX(‘ ’,@WORD))

abc999xyz
質問者

お礼

ありがとうございます。 取り出しはできたのですが、 xyz ではなく、 123 xyz でした。

関連するQ&A

専門家に質問してみよう