我需要替换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
                                            ,'')    
这是结果(使用输出到文本):
Contains   Replaced with -   Removed
---------- ----------------- --------
123 567    123-567           123567
小智 11
用这个:
REPLACE(myString, char(0), '')
这些函数从 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
-- 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
-- Example usage
DECLARE @s nvarchar(10) = N'Test' + NCHAR(0) + N'!';
SELECT dbo.RemoveNulls(@s), dbo.TrimNull(@s);
--> Test!, Test
就我而言,ODBC 中的字段使用 null 填充到 8000 个字符,并且 TrimNull 比 RemoveNulls 快得多。