мс sql найти юникод 0 - PullRequest
0 голосов
/ 17 мая 2018

В базе данных записывается Unicode 0, а затем начался запрос, чтобы найти значение. Пример:

select *,Len(test) as length, Unicode(test) as unicode,DATALENGTH(test) as datalength 
from (values (NCHAR(0x0))) as t(test)
where test like N'_'

но значение не возвращается. Зачем? Что мне нужно сделать, чтобы это работало?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Это ожидаемое поведение согласно документации по сопоставлению с образцом :

0x0000 (char (0)) является неопределенным символом в сопоставлениях Windows и не может быть включено в LIKE.

Обратите внимание, однако, что LIKE CHAR(0) работает

DECLARE @Character nchar(1);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE CHAR(0) THEN 1 ELSE 0 END;

или

DECLARE @Character nchar(10);
SET @Character = NCHAR(0);
SELECT CASE WHEN @Character LIKE '%' + CHAR(0) + '%' THEN 1 ELSE 0 END;

В частности, в документации говорится, что используется подстановочный знак, такой как'_' для (N)CHAR(0) не будет работать.

0 голосов
/ 17 мая 2018

Если я прав, юникод 0 (NCHAR 0x0) не считается как символ, а как NULL (но не тип SQL NULL).Подстановочный знак _ выполняет поиск, заменяя 1 символ, что означает, что значение должно содержать хотя бы один символ.Удаление _ даст вам желаемый результат.

...