这是在SQL Server 2005中。我有一个varchar
列,有些行包含尾随空格,例如abc
,def
。
我尝试使用此命令删除尾随空格:
update thetable
set thecolumn = rtrim(thecolumn)
但是尾随空间仍然存在。我试图找到它们使用:
select *
from thetable
where thecolumn <> rtrim(thecolumn)
但它没有任何回报。
是否有一些我不知道会影响尾随空间检查的设置?
编辑:
我知道SSMS有尾随空格,当我将网格中的值粘贴到编辑器时,它有尾随空格。
答案 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), '')