2016-08-11 20 views
0

私の列の式から末尾の空白を削除し、式の先頭に追加したいと思います。だから、例えば、私は現在の表現を持っている:私はだろう、しかし末尾の空白を削除し、先行スペースとして追加します。

UPDATE My_Table 
SET name = REPLACE(name,'% ',' %') 

:私はこの表現を試してみました

Sample_four_space 
    Sample_two_space 
Sample_one_space 

Sample_four_space  
Sample_two_space 
Sample_one_space 

私はにこの列を変換したいですどんな長さの後続スペースでも機能するより堅牢なクエリのように。後続のスペースをすべて削除して式の先頭に追加するクエリを開発するのを手助けできますか?

答えて

2

あなたが(最後にある、あなたの例のように、そしてあなたがそれらを数えることができますし、最初にそれらを置くすべてのスペースを知っている場合:

select concat(space(length(name) - length(replace(name, ' ', ''))), 
       replace(name, ' ', '') 
      ) 

そうでない場合は、より良い解決策は以下のとおりです。

select concat(space(length(name) - length(trim(trailing ' ' from name))), 
       trim(trailing ' ' from name) 
      ) 

または:

select concat(space(length(name) - length(rtrim(name))), 
       rtrim(name) 
      ) 

これらのケースの両方が(またはの終わりに)スペースの数を数えます関数はスペースを複製し、最初にconcat()と置き換えます。

+1

は、文字列の途中であってもすべてのスペースを置き換えるreplaceの使用に注意する価値があります。そして、後者の解決法は、たとえそれらが最初または中間にスペースがあっても機能しますが、RTRIM()も効率的に使用することができます。 – Matt

+0

そうですが、文字列の途中のスペースを削除せずにそれを行う方法はありますか? – kbball

+0

@kbball 。 。 2番目の方法。サンプルデータには最後にスペースしかなかったので、まずそれを考えました。 –

関連する問題