在sql中替换字符串中的空字符

6 sql-server-2005

我需要替换sql字符串中的空字符,我似乎无法找到正确的命令来实现这一点.我使用了replace(myString,'\ 0',''),但这似乎不起作用,任何帮助都会很棒

use*_*420 12

有效的技巧是在使用REPLACE之前将您的值收集Latin1_General_BIN,并使用 nchar(0x00)COLLATE Latin1_General_BIN for string_pattern.

REPLACE(string_expression,string_pattern,string_replacement)

 select 
 [Terminated]      =          N'123' + nchar(0) + N'567'                                
,[Replaced with -] = REPLACE((N'123' + nchar(0) + N'567') COLLATE Latin1_General_BIN
                                          , nchar(0x00) COLLATE Latin1_General_BIN 
                                                 ,'-')      
,[Removed]        = REPLACE((N'123' + nchar(0) + N'567') COLLATE Latin1_General_BIN
                                    , nchar(0x00)      COLLATE Latin1_General_BIN
                                            ,'')    
Run Code Online (Sandbox Code Playgroud)

这是结果(使用输出到文本):

Contains   Replaced with -   Removed
---------- ----------------- --------
123 567    123-567           123567
Run Code Online (Sandbox Code Playgroud)


小智 11

用这个:

REPLACE(myString, char(0), '')
Run Code Online (Sandbox Code Playgroud)

  • 不适用于UNICODE!对不起,不得不喊出来.这显然是SQL Server Replace()函数中的一个错误,它不会替换nVarChar中的空字符.是的,我尝试了nChar(0),它仍然不起作用.请参见此处:http://stackoverflow.com/a/2828467/555798 (4认同)
  • 切换到使用REPLACE(myString,char(0),'')仍然会在字符串中生成返回null字符 (3认同)

cad*_*ull 7

这些函数从 Unicode 字符串中删除空字符,至少在 SQL Server 2008 中是这样。

-- Remove all null characters
CREATE FUNCTION RemoveNulls(@s nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    DECLARE @r nvarchar(max);
    SET @r = REPLACE(@s COLLATE Latin1_General_BIN, NCHAR(0), N'');
    RETURN @r; 
END
Run Code Online (Sandbox Code Playgroud)
-- Remove all characters from the first null character
CREATE FUNCTION TrimNull(@s nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
    DECLARE @r nvarchar(max);
    DECLARE @i int = CHARINDEX(NCHAR(0), @s COLLATE Latin1_General_BIN);
    IF @i = 0
        SET @r = @s;
    ELSE
        SET @r = SUBSTRING(@s, 1, @i - 1);
    RETURN @r; 
END
Run Code Online (Sandbox Code Playgroud)
-- Example usage
DECLARE @s nvarchar(10) = N'Test' + NCHAR(0) + N'!';
SELECT dbo.RemoveNulls(@s), dbo.TrimNull(@s);
--> Test!, Test
Run Code Online (Sandbox Code Playgroud)

就我而言,ODBC 中的字段使用 null 填充到 8000 个字符,并且 TrimNull 比 RemoveNulls 快得多。