Sql Server - 从数据中删除结束字符串字符"\ 0"

Mar*_*tin 7 sql database sql-server sql-server-2005

我在数据库(SQL Server 2005)中有一个列,其末尾的数据为"\ 0".在SQL Server中查询时,此字符不可见,并且"似乎"不存在.当我查看我的C#代码时,角色就在那里.此字符在我们的网站上导致错误,我们需要从所有受影响的行中删除它.

是否有一个SQL查询我可以编写以轻松从受影响的所有记录中删除此字符?我可以获取所有受影响的记录,但我没有办法将记录更新为新值(没有"\ 0").

更新:这似乎工作:

Select * from TABLE
where UNICODE(SUBSTRING(naughtyField, LEN(naughtyField), 1)) = 0
Run Code Online (Sandbox Code Playgroud)

所以:

Update TABLE
SET naughtyField = SUBSTRING(naughtyField, 1, LEN(naughtyField) - 1)
where UNICODE(SUBSTRING(naughtyField, LEN(naughtyField), 1)) = 0
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 10

UPDATE tbl SET col = REPLACE(col,char(0),'')

编辑:只是为了兑换这个答案!对于字符串嵌入\0s 的更一般情况可能有用.

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
Run Code Online (Sandbox Code Playgroud)

然后

 UPDATE tbl SET col = dbo.RemoveNullChars (col)
Run Code Online (Sandbox Code Playgroud)


Wil*_*l A 3

做...

UPDATE mytable
SET myfield = REPLACE(myfield, CHAR(0), '')
Run Code Online (Sandbox Code Playgroud)

...工作?

SUBSTRING(naughtyfield, 1, LEN(naughtyfield) - 1)在那些以 null 结尾的字段上有效 - 但请注意不要在非 NULL 结尾的字符串上使用它,否则您将丢失数据。