我在数据库 (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/