2013-05-08 71 views
4

我正在嘗試從NVARCHAR(MAX)列中填充價格(由於從具有奇數字符的多個操作系統導入數據而使用NVARCHAR)來清除前導空格和尾隨空格。如何使用LTRIM/RTRIM搜索並替換前導/尾隨空格?

在這一點上,我有一個t-sql命令,可以從靜態價格中刪除前導/尾隨空格。然而,當談到利用這個命令去除所有價格時,我很難過。

這是我用來去除特定的價格靜態腳本:

UPDATE *tablename* set *columnname* = LTRIM(RTRIM(2.50)) WHERE cost = '2.50 '; 

這裏就是我試圖刪除所有尾隨空格:

UPDATE *tablename* set *columnname* LIKE LTRIM(RTRIM('[.]')) WHERE cost LIKE '[.] '; 

我也嘗試過不同的varations的隨機人物的百分比,但在這一點上,我正在旋轉我的輪子。

我希望實現的是運行一個簡單的命令,在不修改任何實際列數據的情況下取消此列的每個單元格中的所有前導和尾隨空格。

+0

總之,你想刪除字符串中的所有空格嗎? – 2013-05-08 02:41:58

+0

我想刪除一個特定列中每個單元格中的所有前導空格和尾隨空格。它們都有先導或尾隨空格。我試圖創建一個報告,當我試圖將這些單元格轉換爲int時,我發現前導/尾隨空格阻止生成報告數據。 – 2013-05-08 02:43:52

+1

那麼使用'LTRIM(RTRIM(val))'有什麼問題? – 2013-05-08 02:45:42

回答

9

要從左/右移除空格,請使用LTRIM/RTRIM。你有什麼

UPDATE *tablename* 
    SET *columnname* = LTRIM(RTRIM(*columnname*)); 

會在所有的行上工作。爲了儘量減少更新,如果你並不需要更新,更新的代碼不變,但在WHERE子句中的LIKE表達本來

UPDATE [tablename] 
    SET [columnname] = LTRIM(RTRIM([columnname])) 
WHERE 32 in (ASCII([columname]), ASCII(REVERSE([columname]))); 

注:32是空格字符的ASCII碼。

+1

完美的工作。我在SQL的這方面有點新,而且我在網上找到的信息要麼老舊,要麼太複雜。 – 2013-05-08 17:08:19

2

要刪除空格......請使用LTRIM/RTRIM LTRIM(字符串) RTRIM(字符串) 傳遞給功能可以是列名,變量,文字串或輸出字符串參數用戶定義的函數或標量查詢。

SELECT LTRIM(' spaces at start') 
SELECT RTRIM(FirstName) FROM Customers 

瞭解更多:http://rockingshani.blogspot.com/p/sq.html#ixzz33SrLQ4Wi

1

LTRIM函數RTRIM功能

  • LTRIM函數刪除前導空格RTRIM 功能到從字符串變量中刪除尾部空格
  • 它使用修剪功能刪除這兩種類型的空間

       select LTRIM(RTRIM(' SQL Server ')) 
    

    輸出:

          SQL Server 
    
-1

了LTRIM函數刪除導致空間和RTRIM函數從字符串變量除去尾隨空格。 它使用修剪功能去除這兩種類型的空格,並且意味着在字符串的空格之前和之後。

SELECT LTRIM(RTRIM(REVERSE( '下一級EMPLOYEE')))

+2

逆向做什麼?爲什麼我們必須使用reverse ..請解釋.. – RamPrakash 2017-03-01 14:26:51

+0

@RamPrakash返回字符串值的相反順序。 – 2017-03-02 21:46:07

+1

@MuratVezir我知道它的功能,我想明白,OP是否要求反向? – RamPrakash 2017-03-02 23:40:52

0
SELECT RTRIM(' Author ') AS Name; 

輸出將沒有任何尾隨空格。

名稱 ------ 「作者」

0

我理解這個問題是SQL Server 2012,但如果用於SQL Server 2017年或SQL Azure的相同的情況下,你可以按照以下直接使用修剪:

UPDATE *tablename* 
    SET *columnname* = trim(*columnname*);