Sql Server - 从数据中删除结束字符串字符“\ 0”
我在数据库中有一列(SQL Server 2005),数据在最后有一个“\ 0”。在SQL Server中查询时,该字符不可见,也不“看起来”存在。当我查看我的C#代码时,角色就在那里。此人物在我们的网站上造成错误,我们需要将其从所有受影响的行中移除。Sql Server - 从数据中删除结束字符串字符“ 0”
是否有我可以写入的sql查询轻松地从受影响的所有记录中删除此字符?我可以获取所有受影响的记录,但我没有办法将记录更新为新值(没有“\ 0”)。
UPDATE: 这似乎工作:
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
是否......
UPDATE mytable
SET myfield = REPLACE(myfield, CHAR(0), '')
...工作?
SUBSTRING(naughtyfield, 1, LEN(naughtyfield) - 1)
在那些空终止的作品 - 但要小心不要使用它在非NULL终止的字符串或您将丢失数据。
从我的快速测试。 'create table #t(col varchar(50))insert into #t values('hgjh'+ char(0)+'gghg')UPDATE #t SET col = REPLACE(col,char(0),'') – 2010-08-20 17:33:56
LEN(naughtyfield)是否返回包含MSSQL中null结束符的长度? – 2010-08-20 17:36:03
是的,Len('列中的字符串')= X,Len(naughtyfield)= X + 1 – Martin 2010-08-20 17:37:56
UPDATE TBL SET列= REPLACE(COL,CHAR(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)
谢谢!做得好! – dyatchenko 2016-09-29 22:33:10
我遇到了这个问题,最近修复了它。它似乎总是在一个字符串的末尾(因为它是一个终结符字符)。
而且,因为它不是一个空白,它会导致RTRIM不上有多余的尾随空格领域工作(例如 '加州 \ 0')。
去除最安全的方法是(0)向子串(“\ 0”或字符串长度的最后一个索引,如果“\ 0”未找到)
这里是我如何安全地删除它我的情况
substring([field], 0, (LEN([field]) - CHARINDEX(char(0), REVERSE([field])) + 1))
这里是删除它,也修剪额外的空间。
ltrim(rtrim(substring([field], 0, (LEN([field]) - CHARINDEX(char(0), REVERSE([field])) + 1))))
那么,我该怎么做?威尔的回答是不正确的,但他的帮助使我找到了解决办法。 – Martin 2010-08-20 18:03:29
如果Will将他关于使用'SUBSTRING(naughtyfield,1,LEN(naughtyfield)1)'的评论转移到他的答案中来解决问题吗? – 2010-08-20 18:06:19
是的...虽然你的答案更优雅,但我不认为我可以在Prod数据库上创建一个功能,只是为了“快速修复”。文书工作太多。 – Martin 2010-08-20 18:08:14