SQL Server删除空格,零和空格的记录

时间:2014-02-10 18:05:02

标签: sql-server

我有一个列长度必须为6位数的列。我想弄清楚的问题是: 如果列包含任何空格或0或只是一个空格,那么我需要从查询结果中排除该记录:

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 个答案:

答案 0 :(得分: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