2016-09-30 158 views
2

我花了很多時間試圖找出這一點......看着其他幾十個答案。SQL如何刪除所有的ASCII字符(空白字段輸入後空白)

我在SQL Server中有一個表類型爲Char(32) NULL的表。表格欄中的所有項目只有char(9),但其餘位置有空白(運行select ascII(right(myField, 1))時有32個)。

我已經嘗試了更換,嘗試更新的領域從不是Temptable試圖從tempTbl刪除和更新.....每次我選擇...領域仍然30長。

有沒有辦法去除所有多餘的空格?或者這只是CHAR字段總是工作的方式?

我曾嘗試:

UPDATE table 
SET myfield = rtrim(replace(myField , char(160), char(32))) 

UPDATE mytable 
SET myField = REPLACE(RTRIM(LTRIM(myField)), CHAR(32), '') 
+3

由於數據類型是CHAR(32),因此值將始終爲32個字符。這將右鍵填充空格值直到達到32位。如果不想填充空格,應考慮使用varchar(32)。 –

回答

2

必須區分字符串與固定寬度

  • 串與可變寬度

    之間

    在你的情況,你是在處理一個固定的寬度。這意味着,該字符串始終填充到其定義的長度。 固定寬度字符串與datetime或int值一起在之內的行。

    如果您將列定義爲VARCHAR(32)(意思是可變字符),則「32」僅限制最大長度。這些值被存儲在(大多數情況下)的某個地方以外的行的存儲空間,同時有只有一個指針的實際存儲位置的行內。

    固定長度稍微快於可變字符串。但在大多數情況下,我建議更喜歡VARCHAR(x)

    檢查了這一點:

    DECLARE @fix CHAR(32)='test'; 
    DECLARE @variable VARCHAR(32)='test'; 
    
    SELECT LEN(@fix),DATALENGTH(@fix) 
         ,LEN(@variable),DATALENGTH(@variable) 
    

    導致

    4,32,4,4 
    
    • LEN()功能全不計尾隨空格
    • DATALENGTH() - 函數給你實際使用的空間爲
  • +0

    好的解釋....好的...是的,所以我想我們將不得不改變爲varchar以獲得我們真正需要的東西。非常感謝。 – KAT

    0

    CHAR(32)將佔據所有32個字符。

    如果你想修剪並存儲它,你應該使用varchar(32)。

    嘗試將您的字段轉換爲varchar。