SQL Server 2008:如何删除char(0)

时间:2014-09-09 15:02:50

标签: sql sql-server-2008

我有一个列似乎最后有一个空格。我尝试使用ltrimrtrim但它不起作用。

我尝试运行此查询:

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

我看到最后2行是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)带高级服务的快捷版(64位)
    在Windows NT 6.1(Build 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));

2 个答案:

答案 0 :(得分:1)

我再次遇到这个问题,我在网上找到了一个很好的解决方案:

CREATE FUNCTION [dbo].[RemoveNullChars] 
(
    @string NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX) WITH RETURNS NULL ON NULL INPUT
AS
BEGIN
DECLARE @Result NVARCHAR(MAX)
SET @Result = ''

DECLARE @counter INT

SET @counter = 0

WHILE (@counter <= LEN(@string))
    BEGIN
     IF UNICODE(SUBSTRING(@string,@counter,1)) <>  0 
        SET @Result = @Result + SUBSTRING(@string,@counter,1)
    SET @counter = @counter + 1    
    END
RETURN @Result
END

并且这样做:

update tbl set col = RemoveNullChars(col)

答案 1 :(得分:0)

不要混用nvarcharvarcharncharchar,您可能会遇到编码转换问题会对您造成影响的情况。

你说这个列是nvarchar

使用nvarchar / nchar