- 締切済み
SQLServerで文字列の末尾からある位置で取出
SQLServer2012で selectで文字列の末尾から(右から)ある文字の位置までを取り出したいのですが どのようなSQLにすればよいのでしょうか。 やりたいことは、 例えば、文字列「abc 123 xyz」があるとします。 末尾から(右から)見て、最初に見つかった半角スペースから後ろ「xyzを取り出し たいです。 RIGHT を使えば取り出すことはできるのですが、取り出したい文字列の長さが同じ でないので使うことができません。 お願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- innoya
- ベストアンサー率71% (10/14)
こんにちは。 あぁ。空白が入っていましたね。 下記のように-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関数により検索ができなかったからです。 どんなデータでどんなデータを得られたいかをもっと詳しく教えて頂ければ、 答えするのに助かりますが。。。 よろしくお願いします。
- innoya
- ベストアンサー率71% (10/14)
こんにちは。 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))) よろしくお願いします。
お礼
ありがとうございます。 REVERSE関数があるとは知りませんでした。 取り出しはできたのですが、半角スペースが残るのですね。 LTRIM で消せました。 CHARINDEXで検索文字列を「123」とすると結果が得られ ないのですが、REVERSE関数により反転してしまっている からですか。
- bin-chan
- ベストアンサー率33% (1403/4213)
Strrev関数で、最初のスペースまで拾ってまたstrrev
- IDii24
- ベストアンサー率24% (1597/6506)
DECLARE @WORD1 VAERCHAR(100) SET @WORD = 'abc 123 xyz' SELECT RIGHT(@WORD,LEN(@WORD) - CHARINDEX(‘ ’,@WORD))
お礼
ありがとうございます。 取り出しはできたのですが、 xyz ではなく、 123 xyz でした。
お礼
ありがとうございます。 返事が遅くなりましたが、 データとしては 部署名△チーム名△UP△社員番号 部署名△チーム名△DW△社員番号 部署名△チーム名△協力者社員番号 部署名△チーム名△社員番号 : : 部署名△チーム名△UP△社員番号 部署名△チーム名△DW△社員番号 ※△=半角スペース 日本語は、実際には、値が入っています。 の様なデータから 獲たいデータは、 UP△社員番号 DW△社員番号 協力者社員番号 社員番号 を取り出したいのです