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)
做...
UPDATE mytable
SET myfield = REPLACE(myfield, CHAR(0), '')
Run Code Online (Sandbox Code Playgroud)
...工作?
SUBSTRING(naughtyfield, 1, LEN(naughtyfield) - 1)在那些以 null 结尾的字段上有效 - 但请注意不要在非 NULL 结尾的字符串上使用它,否则您将丢失数据。
| 归档时间: |
|
| 查看次数: |
11329 次 |
| 最近记录: |