こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

末尾の全角スペースの削除

SQL Server 2008環境です。

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

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

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

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

宜しくお願いします。

投稿日時 - 2014-07-02 17:08:56

QNo.8662156

困ってます

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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件になるまで繰り返す。

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

投稿日時 - 2014-07-20 13:41:17

ANo.3

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

投稿日時 - 2014-07-03 10:02:06

ANo.2

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

投稿日時 - 2014-07-03 09:52:55

ANo.1

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

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


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

投稿日時 - 2014-07-02 17:57:17

補足

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

投稿日時 - 2014-07-02 18:34:20