2016-08-11 39 views
0

我想從列中的表達式中刪除尾部空格,並將它們添加到表達式的開頭。因此,舉例來說,我目前擁有的表達式:刪除尾部空格並將它們添加爲前導空格

Sample_four_space  
Sample_two_space 
Sample_one_space 

我想這列轉換爲:

Sample_four_space 
    Sample_two_space 
Sample_one_space 

我已經試過這樣表達:

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

不過,我想就像一個更健壯的查詢,可以適用於任何長度的尾部空格。你能幫我開發一個查詢,它將刪除所有尾隨空格並將它們添加到表達式的開始處?

回答

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

可能值得注意的是,即使在字符串中間使用替換也會替換所有空格。而後者的解決方案即使在開始或中間是空格,但RTRIM()也可以高效地使用。 – Matt

+0

就這樣,有沒有辦法做到這一點,而不必刪除字符串中的空格? – kbball

+0

@kbball。 。 。第二種方法。樣本數據只在最後有空格,所以我首先想到了這一點。 –

相關問題