Как уже упоминалось парой людей, это может быть не пробел. Возьмите копию ngrams8k , и вы используете ее для выявления проблемы. Например, здесь у нас есть текст «ПРОБЕЛ» с предшествующим пробелом и завершающим символом CHAR (160) (тег HTML BR). CHAR (160) выглядит как пробел в SSMS, но не является "тримблируемым". Например, рассмотрим этот запрос:
DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160);
SELECT '"'+@string+'"'
Используя ngrams8k , вы можете сделать это:
DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160);
SELECT
ng.position,
ng.token,
asciival = ASCII(ng.token)
FROM dbo.ngrams8k(@string,1) AS ng;
Возвращает:
position token asciival
---------- ------- -----------
1 32
2 S 83
3 P 80
4 A 65
5 C 67
6 E 69
7 160
Как видите, первый символ (позиция 1) - это CHAR (32), это пробел. Последний символ (позиция 7) не является пробелом. Зная, что CHAR (160) - это проблема, вы можете решить ее следующим образом:
SET @string = REPLACE(LTRIM(@string),CHAR(160),'')
Если вы используете SQL Server 2017+, вы также можете использовать TRIM
, что делает намного больше, чем просто LTRIM-и-RTRIM-ки. Например, это удалит начальные и конечные вкладки, пробелы, возврат каретки, возврат строки и теги HTML BR.
SET @string = SELECT TRIM(CHAR(32)+CHAR(9)+CHAR(10)+CHAR(13)+CHAR(160) FROM @string)