アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServer2012で
selectで文字列の末尾から(右から)ある文字の位置までを取り出したいのですが
どのようなSQLにすればよいのでしょうか。

やりたいことは、
例えば、文字列「abc 123 xyz」があるとします。
末尾から(右から)見て、最初に見つかった半角スペースから後ろ「xyzを取り出し
たいです。

RIGHT を使えば取り出すことはできるのですが、取り出したい文字列の長さが同じ
でないので使うことができません。

お願いします。

A 回答 (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関数により検索ができなかったからです。
どんなデータでどんなデータを得られたいかをもっと詳しく教えて頂ければ、
答えするのに助かりますが。。。

よろしくお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

返事が遅くなりましたが、
データとしては
部署名△チーム名△UP△社員番号
部署名△チーム名△DW△社員番号
部署名△チーム名△協力者社員番号
部署名△チーム名△社員番号
:
:
部署名△チーム名△UP△社員番号
部署名△チーム名△DW△社員番号

※△=半角スペース
日本語は、実際には、値が入っています。

の様なデータから
獲たいデータは、
UP△社員番号
DW△社員番号
協力者社員番号
社員番号
を取り出したいのです

お礼日時:2014/02/28 21:27

こんにちは。



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)))

よろしくお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

REVERSE関数があるとは知りませんでした。
取り出しはできたのですが、半角スペースが残るのですね。
LTRIM で消せました。

CHARINDEXで検索文字列を「123」とすると結果が得られ
ないのですが、REVERSE関数により反転してしまっている
からですか。

お礼日時:2014/02/27 18:27

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

    • good
    • 0

DECLARE @WORD1 VAERCHAR(100)


SET @WORD = 'abc 123 xyz'

SELECT RIGHT(@WORD,LEN(@WORD) - CHARINDEX(‘ ’,@WORD))
    • good
    • 0
この回答へのお礼

ありがとうございます。

取り出しはできたのですが、
xyz
ではなく、
123 xyz
でした。

お礼日時:2014/02/27 18:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A