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

标签 sql sql-server database sql-server-2005

我在数据库 (SQL Server 2005) 中有一个列,其数据末尾带有“\0”。在 SQL Server 中查询时,这个字符是不可见的,“似乎”不存在。当我查看我的 C# 代码时,字符就在那里。此字符导致我们的网站出现错误,我们需要将其从所有受影响的行中删除。

是否有我可以编写的 sql 查询来轻松地从所有受影响的记录中删除此字符?我可以获得所有受影响的记录,但我没有办法将记录更新为新值(没有“\0”)。

更新: 这似乎有效:

Select * from TABLE
where UNICODE(SUBSTRING(naughtyField, LEN(naughtyField), 1)) = 0

所以:

Update TABLE
SET naughtyField = SUBSTRING(naughtyField, 1, LEN(naughtyField) - 1)
where UNICODE(SUBSTRING(naughtyField, LEN(naughtyField), 1)) = 0

最佳答案

<罢工> 更新 tbl SET col = REPLACE(col,char(0),'')

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

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 = dbo.RemoveNullChars (col)

关于SQL Server - 从数据中删除结束字符串字符 "\0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3533320/

相关文章:

sql-server - 触发 AFTER INSERT、UPDATE、DELETE 以调用带有表名和主键的存储过程

sql-server - 通过选择多个表到某个文件位置从 SQL Server 生成 XML

mysql - 一次连接多个表 :

MySQL:克隆表 A 中的多行和表 B 中的相关行

sql - 当字符串包含某些符号字符时,神秘的Postgres字符串比较结果

mysql - 如何将数据从MySql加载到MS SQL Server数据库?

sql-server - SQL Server 二进制文件存储

database - 版本控制/记录对数据库模型的更改

c - 数据库系统中的文件组织和操作

c# - 返回 bool 值以在 C# 中处理的 sql 命令