2014-02-10 27 views
1

我有一列的長度必須是6位數。我想弄清楚的問題是這樣的: 如果列包含任何空格或0,或只是一個空間,然後我需要排除從查詢結果記錄:SQL Server刪除空格,零和空格的記錄

Column A 
964015 
00279R 
0 


25015 
0 
352 
8290 
0 

結果必須是:

Column A 
964015 
00279R 
C25015 
C00352 
C08290 

我對小於6位的部分進行了編碼,但是排除0,空格和空白的部分就是我卡住的部分。任何提示都表示讚賞。這裏是我的代碼的部分:

CREATE TABLE #Hello([Column A] varchar(6)) 
INSERT INTO #Hello VALUES('00279R') 
INSERT INTO #Hello VALUES('35269') 
INSERT INTO #Hello VALUES('0') 
INSERT INTO #Hello VALUES(' ') 
INSERT INTO #Hello VALUES('') 
INSERT INTO #Hello VALUES('352') 
INSERT INTO #Hello VALUES('8290') 


SELECT (Case When Len([Column A]) = 5 THEN 'C' + [Column A] 
     WHEN Len([Column A]) = 4 THEN 'C' + '0' + [Column A] 
     WHEN Len([Column A]) = 3 THEN 'C' + '00' + [Column A] 
     WHEN Len([Column A]) = 2 THEN 'C' + '000' + [Column A] 
     WHEN Len([Column A]) = 1 THEN 'C' + '0000' + [Column A] 
     WHEN Len([Column A]) = 0 THEN 'C' + '00000' + [Column A] 
     ELSE [Column A] END) 
     FROM #Hello 

回答

1

怎麼是這樣的:

SELECT CASE WHEN LEN([Column A]) = 6 THEN [Column A] 
    ELSE STUFF('C000000', 7 - LEN([Column A]), 6, [Column A]) 
    END 
FROM Hello 
WHERE RIGHT('000000' + ISNULL(LTRIM(RTRIM([Column A])), ''), 6) <> '000000' 

這將排除空行,​​以及那些剛剛000000。而且,剩下的東西最終會以零填充到左側,只有6個字符長。

這是SQL Fiddle to prove it

+0

什麼樣的SQL Server魔術是?非常感謝。完美的作品。非常感激。 – user3221917

+0

@ user3221917:我很高興能夠提供幫助,以下是關於STUFF的MSDN文檔(http://technet.microsoft.com/zh-cn/library/ms188043.aspx)。 –