プロが教える店舗&オフィスのセキュリティ対策術

SQL Server 2008環境です。

文字列の末尾の空白を一括して削除したくて、以下のようなクエリを書きました。

UPDATE TEST_TABLE
SET NAME = REPLACE(RTRIM(REPLACE(StoreBranchName, ' ', ' ')), ' ', ' ')

全角スペースを一度半角スペースにして、RTRIMをかけた後、最後に
半角スペースを全角に直すというものです。

しかし、これだと、元々半角スペースが入っていた場合、そっちまで全角スペースに
なってしまうため悩んでおります。
うまいやり方を教えていただけないでしょうか。

宜しくお願いします。

A 回答 (4件)

素直に



UPDATE TEST_TABLE
SET NAME = substring(StoreBranchName,1,len(StoreBranchName)-1)
where substring(StoreBranchName,len(StoreBranchName),1) = ' '
while @@rowcount > 0
begin
UPDATE TEST_TABLE
SET NAME = substring(StoreBranchName,1,len(StoreBranchName)-1)
where substring(StoreBranchName,len(StoreBranchName),1) = ' '
end

とでもすれば?
と思います。

説明:
末尾1文字が全角空白なら、文字列を末尾1文字を除く文字列に置き換える。
処理結果が0件になるまで繰り返す。

なお、全角空白、半角空白と続くと、半角空白より前は削除されません。
    • good
    • 1

補足


先ほどの回答は可変長文字列の場合です。固定長の場合はNAMEをRTRIM(NAME)とします。
UPDATE TEST_TABLE
SET NAME=LEFT(RTRIM(NAME),LEN(RTRIM(NAME))-1)
where RTRIM(NAME) LIKE '% '
    • good
    • 1

最初にNAMEにSETして


UPDATE TEST_TABLE SET NAME=StoreBranchName
以下の操作を右端の全角スペースが無くなるまで繰り返し実行すれば出来ます。
UPDATE TEST_TABLE SET NAME=LEFT(NAME,LEN(NAME)-1) where NAME LIKE '% '
    • good
    • 0

SQL Serverで使用できる関数が分からないので、とりあえず考え方だけ。



その1
全角スペースを一度半角スペースにしてRTRIMをかけた後、その長さの分だけ元の文字列から取り出す。


その2
文字列の中に連続した半角スペース2個が含まれていないことが保証されるなら、
全角スペースを一度半角スペース2個にして、RTRIMをかけた後、半角スペース2個を全角に直す。
(連続した半角スペース2個が含まれているかもしれないなら、半角スペース3個とか4個とかで)

この回答への補足

ありがとうございます。
半角スペース2個にしてみましたが、動作的には同じく、
半角スペース1個も全角にしてしまっておりました…。

補足日時:2014/07/02 18:34
    • good
    • 0

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

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

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