【问题标题】:SQL Server 2008 : how to remove char(0)SQL Server 2008:如何删除 char(0)
【发布时间】:2014-09-09 15:02:50
【问题描述】:

我有一列似乎在末尾有一个空格。我尝试使用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

我看到最后两行是 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


【解决方案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)

【讨论】:

    【解决方案2】:

    不要将nvarcharvarcharncharchar 混用,否则可能会遇到编码转换问题。

    您说该列是 nvarchar

    使用nvarchar/nchar

    【讨论】:

    • 刚刚编辑了帖子。即使我使用 NVARCHAR(250),它也是一样的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多