【发布时间】:2014-09-09 15:02:50
【问题描述】:
我有一列似乎在末尾有一个空格。我尝试使用ltrim 和rtrim,但它不起作用。
我尝试运行此查询:
DECLARE @Val NVARCHAR(250)
DECLARE @i INT
SET @Val = (select companyname from companies where companyid=3839)
SET @i = 0
WHILE @i <= DATALENGTH(@Val)
BEGIN
PRINT SUBSTRING(@Val, @i, 1) + ' : ' + CAST(ASCII(SUBSTRING(@Val, @i, 1)) AS VARCHAR(3))
SET @i = @i + 1
END
我看到最后两行是 32 和 0 = char(32) 和 char(0)。
我尝试使用替换:
select replace(replace(companyname, char(0),''), char(32), '')
from companies
where companyid = 3839
但它也不起作用。
还有其他解决方案吗?
- 列类型:
nvarchar(250) - 列排序规则:
Hebrew_CI_AS - SQL Server 版本:Microsoft SQL Server 2008 R2 (RTM)
具有高级服务的 10.50.1600.1 (X64) Express Edition(64 位)
在 Windows NT 6.1(内部版本 7601:Service Pack 1)上
也试过了,最后还是看到一个空格:
Set @StringToClean = Replace(@StringToClean,CHAR(0),CHAR(32));
--Horizontal Tab
Set @StringToClean = Replace(@StringToClean,CHAR(9),CHAR(32));
--Line Feed
Set @StringToClean = Replace(@StringToClean,CHAR(10),CHAR(32));
--Vertical Tab
Set @StringToClean = Replace(@StringToClean,CHAR(11),CHAR(32));
--Form Feed
Set @StringToClean = Replace(@StringToClean,CHAR(12),CHAR(32));
--Carriage Return
Set @StringToClean = Replace(@StringToClean,CHAR(13),CHAR(32));
--Column Break
Set @StringToClean = Replace(@StringToClean,CHAR(14),CHAR(32));
--Non-breaking space
Set @StringToClean = Replace(@StringToClean,CHAR(160),CHAR(32));
Set @StringToClean = LTRIM(RTRIM(@StringToClean));
【问题讨论】:
-
要物理删除数据,您需要更新字段,而不仅仅是选择它。
-
什么意思?这只是一个样本。我的意思是在那之后我运行'select @StringToClean'并且仍然看到空间
-
你可以看看这个问题:stackoverflow.com/questions/10952252/…
-
@HLGEM - 谢谢,但也没有用。我放弃并这样做了:更新公司设置公司名称=左(公司名称,len(公司名称)-2)其中公司名称喜欢'%'
标签: sql sql-server-2008