2017-05-25 39 views
0

我有一個包含多個字段的SQL表。在任何文本字段中,在我感興趣的字符串的右側有重複的字符,如下所示:無法從SQL字符串中刪除字符

'AAA .................. ........' - 不幸的是,堆疊溢出正在修改帖子中的字符(Ironic?),所以我用''替換了它們。嘗試給人留下印象。

當我運行下面的SQL,隱藏人物顯得空間:

SELECT ASCII(RIGHT(EXCHANGE, 1)) FROM T_TMP_INS -- Returns 32 

如果我運行以下命令:

SELECT REPLACE(FIELD, CHAR(32), '@') FROM TABLE1 

結果是:

AAA @@@@@@@@@@@@@@@@@@@@

所以,我認爲我可以只使用一個更新刪除空格字符這樣:

UPDATE TABLE1 SET FIELD = REPLACE(FIELD, CHAR(32), '') 

但更新不什麼那麼更改字段。

是否有一個原因,我錯過了爲什麼選擇識別並替換錯誤的字符和更新聲明不是?

感謝您的任何幫助。

+1

該列是如何定義的?我想它是CHAR或NCHAR而不是VARCHAR或NVARCHAR,它們沒有長度信息並用空格填充內容。 – Lucero

回答

1

如果該字段被聲明爲例如char(10)然後它會總是包含10個字符,並在末尾添加空格以彌補較短的字符串。

如果你想聲明能夠存儲字符串高達 10個字符長的列,但不希望在較短的值填充,它應該被聲明爲varchar(10)。 (同樣,ncharnvarchar)。

(如果你無法改變列的聲明,只是需要檢索過程中解決它,那麼你應該先CASTCONVERTvarchar/nvarchar形式和然後修剪與RTRIM結束)


您也可以嘗試調整ANSI_PADDING設置以更改此行爲。我建議不要這樣做 - 這任何SQL數據庫系統的標準行爲,所以我建議使用它,而不是使用非標準的產品特定工作。

+0

這很有道理。直到這個響應,我才明白char和varchar之間的區別。剛剛放下我的桌子並用varchar重新創建它。加載的數據,現在看起來不錯,謝謝! – ricky89

0

如果字符是空格,您可以使用RTRIM(FIELD)來修剪它們。

如果還有前導空格,則可以使用LTRIM(RTRIM(FIELD))

+0

與替換一樣,RTRIM和LTRIM函數僅適用於SELECT。使用更新他們不再工作 – ricky89

+0

然後檢查列的類型@Damien_The_Unbeliever提到。 – Kostis