我有一个列似乎最后有一个空格。我尝试使用ltrim
和rtrim
但它不起作用。
我尝试运行此查询:
DECLARE @Val NVARCHAR(250)
DECLARE @i INT
SET @Val = (select companyname from companies where companyid=3839)
SET @i = 0
WHILE @i <= DATALENGTH(@Val)
BEGIN
PRINT SUBSTRING(@Val, @i, 1) + ' : ' + CAST(ASCII(SUBSTRING(@Val, @i, 1)) AS VARCHAR(3))
SET @i = @i + 1
END
我看到最后2行是32和0 = char(32)和char(0)。
我尝试使用替换:
select replace(replace(companyname, char(0),''), char(32), '')
from companies
where companyid = 3839
但它也行不通。
还有其他解决方案吗?
nvarchar(250)
Hebrew_CI_AS
还尝试了这个,我仍然在最后看到一个空格:
Set @StringToClean = Replace(@StringToClean,CHAR(0),CHAR(32));
--Horizontal Tab
Set @StringToClean = Replace(@StringToClean,CHAR(9),CHAR(32));
--Line Feed
Set @StringToClean = Replace(@StringToClean,CHAR(10),CHAR(32));
--Vertical Tab
Set @StringToClean = Replace(@StringToClean,CHAR(11),CHAR(32));
--Form Feed
Set @StringToClean = Replace(@StringToClean,CHAR(12),CHAR(32));
--Carriage Return
Set @StringToClean = Replace(@StringToClean,CHAR(13),CHAR(32));
--Column Break
Set @StringToClean = Replace(@StringToClean,CHAR(14),CHAR(32));
--Non-breaking space
Set @StringToClean = Replace(@StringToClean,CHAR(160),CHAR(32));
Set @StringToClean = LTRIM(RTRIM(@StringToClean));
答案 0 :(得分:1)
我再次遇到这个问题,我在网上找到了一个很好的解决方案:
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 = RemoveNullChars(col)
答案 1 :(得分:0)
不要混用nvarchar
和varchar
或nchar
和char
,您可能会遇到编码转换问题会对您造成影响的情况。
你说这个列是nvarchar
使用nvarchar
/ nchar