Я должен заменить нулевой символ в строке sql, я, может казаться, не нахожу, что правильная команда достигает этого. Я использовал замену (myString, '\0', ''), но это, кажется, не работает, любая справка была бы большой
Если вы объединяете значения для получения строки, используйте IsNull(value, replacement), чтобы избежать нулевых значений, или установите CONCAT_NULL_YIELDS_NULL ON, чтобы избежать нулевых строк в результате.
Я не совсем уверен, что не так с вашими строками, но вот несколько вещей, которые можно попробовать, вы используете varchar ?, отредактируйте вопрос, указав более подробную информацию :
если у вас есть символы NULL в строке:
declare @x varchar(10)
set @x='123'+char(0)+'456'
SELECT @x AS Has_NULL_in_it, REPLACE(@x, char(0), '') AS Has_NULL_removed
OUTPUT:
Has_NULL_in_it Has_NULL_removed
-------------- ----------------
123 456 123456
(1 row(s) affected)
Если вы не можете определить символ в строке, попробуйте этот ASCII:
DECLARE @y varchar(10),@c int
set @y='123'+char(0)+'456'
set @c=0
WHILE @c<LEN(@y)
BEGIN
SET @c=@c+1
PRINT CONVERT(varchar(5),@c)+' - '+SUBSTRING(@y,@c,1)+' - CHAR('+CONVERT(varchar(5),ASCII(SUBSTRING(@y,@c,1)))+')'
END
OUTPUT:
1 - 1 - CHAR(49)
2 - 2 - CHAR(50)
3 - 3 - CHAR(51)
4 - - CHAR(0)
5 - 4 - CHAR(52)
6 - 5 - CHAR(53)
7 - 6 - CHAR(54)
попробуйте этот unicode:
DECLARE @y nvarchar(10),@c int
set @y='123'+char(0)+'456'
set @c=0
WHILE @c<LEN(@y)
BEGIN
SET @c=@c+1
PRINT CONVERT(nvarchar(5),@c)+' - '+SUBSTRING(@y,@c,1)+' - UNICODE('+CONVERT(nvarchar(5),UNICODE(SUBSTRING(@y,@c,1)))+')'
END
, если у вас есть строки, которые полностью NULL:
declare @z varchar(10)
set @z=NULL
select @z AS IS_NULL, ISNULL(@Z,'') AS NULL_Removed
ВЫХОД:
IS_NULL NULL_Removed
---------- ------------
NULL
(1 row(s) affected)
Для латинских символов: select REPLACE('Ho'+CHAR(0)+'mer' COLLATE SQL_Latin1_General_CP1_CS_AS, CHAR(0), '')
Для русских символов: select REPLACE(('Го'+CHAR(0)+'мер') COLLATE Cyrillic_General_BIN , CHAR(0), '')