无法删除SQL Server 2005中的尾随空格

时间:2011-05-03 13:42:52

标签: sql-server

这是在SQL Server 2005中。我有一个varchar列,有些行包含尾随空格,例如abcdef

我尝试使用此命令删除尾随空格:

update thetable 
set thecolumn = rtrim(thecolumn)

但是尾随空间仍然存在。我试图找到它们使用:

select * 
from thetable 
where thecolumn <> rtrim(thecolumn)

但它没有任何回报。

是否有一些我不知道会影响尾随空间检查的设置?

编辑:

我知道SSMS有尾随空格,当我将网格中的值粘贴到编辑器时,它有尾随空格。

6 个答案:

答案 0 :(得分:14)

检查未删除的空格是否具有ASCII代码32。 试着用“软空间”代替“硬空间”:

update thetable set thecolumn = rtrim(replace(thecolumn, char(160), char(32)))

查询缺少等号

答案 1 :(得分:8)

你确定它是一个空格(ascii 32)角色吗?您可以使用其他“不可见”字符获得奇怪的行为。尝试运行

select ascII(right(theColumn, 1))
 from theTable

看看你得到了什么。

答案 2 :(得分:2)

使用此功能:

创建函数[dbo]。[FullTrim](@strText varchar(max)) 返回varchar(max)as 开始

Declare @Ch1 char,@ch2 char
Declare @i int,@LenStr int
Declare @Result varchar(max)
Set @i=1
Set @LenStr=len(@StrText)
Set @Result=''


While @i<=@LenStr
Begin
    Set @ch1=SUBSTRING(@StrText,@i,1)
    Set @ch2=SUBSTRING(@StrText,@i+1,1)
    if ((@ch1=' ' and @ch2=' ') or (len(@Result)=0 and @ch1=' '))

        Set @i+=1

    Else
        Begin
            Set @Result+=@Ch1
            Set @i+=1

        End

End

返回@Result 端

答案 3 :(得分:1)

SQL中,CHAR(n)列右边用空格填充。

字符串比较运算符(以及大多数函数)也不考虑尾随空格。

DECLARE @t TABLE (c CHAR(10), vc VARCHAR(10))

INSERT
INTO    @t
VALUES  ('a   ', 'a    ')

SELECT  LEN(c), LEN(vc), с + vc
FROM    @t

--
1    1    "a         a"

请运行此查询:

SELECT  *
FROM    thetable
WHERE   thecolumn + '|' <> RTRIM(thecolumn) + '|'

看看是否找到了什么。

答案 4 :(得分:0)

听起来像是:

1)无论您使用什么来查看值,都会插入尾随空格(或其外观 - 尝试像Consolas这样的固定宽度字体)。

2)列是CHAR,而不是VARCHAR。在这种情况下,该列将填充空格直到列的长度,例如,将'abc'插入char(4)将始终导致'abc'

3)您不知道提交更新,不更新正确的列或其他形式的用户错误。更新语句本身看起来是正确的。

答案 5 :(得分:0)

我在RTRIM()和LTRIM()函数方面遇到了同样的问题。

在我的情况下,问题出现在LF和CR字符中。

解决方案

DECLARE @test NVARCHAR(100)
SET @test = 'Declaration status  '

SET @test = REPLACE(REPLACE(@test, CHAR(10), ''), CHAR(13), '')