Напишите запрос T-SQL, который фильтрует записи, содержащие NCHAR (2028) - PullRequest
4 голосов
/ 02 февраля 2010

Моя конечная цель - написать сценарий sql, который выбирает данные из определенной таблицы, в которой столбец nvarchar (max) содержит символ NCHAR (2028).

Но очевидное:

select * 
from tablename
where columnname like '%' + NCHAR(2028) + '%'

возвращает все строки.

Ответы [ 3 ]

4 голосов
/ 02 февраля 2010

Используйте двоичное сопоставление для сравнения.

select * 
from tablename
where columnname COLLATE Latin1_General_Bin like '%' + NCHAR(2028) + '%'
2 голосов
/ 02 февраля 2010

Это работает

CREATE TABLE #temp (columnname NVARCHAR(128))

INSERT #temp VALUES ('a')
INSERT #temp VALUES ( NCHAR(2028))
INSERT #temp VALUES ('b')
INSERT #temp VALUES ('c' +  NCHAR(2028) + 'c')
 INSERT #temp VALUES ('a' + NCHAR(2028) + 'b') 





 SELECT  *
FROM #temp
WHERE ColumnName COLLATE Latin1_General_Bin Like N'%' + NCHAR(2028) + '%'

drop table  #temp
1 голос
/ 02 февраля 2010

Я думаю, что вы устанавливаете ограничения на символы, которые находятся за пределами вашей сортировки.У меня было странное поведение.Обратите внимание на результат двух SELECT здесь:

CREATE TABLE dbo.foo
(
    id INT IDENTITY(1,1),
    bar NVARCHAR(128)
);

INSERT dbo.foo(bar) SELECT N'foobar'
UNION 
SELECT N'foo' + NCHAR(2028) + N'bar'

SELECT *
    FROM dbo.foo
    WHERE bar LIKE N'%' + NCHAR(2028) + '%';

TRUNCATE TABLE dbo.foo;

INSERT dbo.foo(bar)
SELECT N'foo' + NCHAR(2028) + N'bar'

SELECT *
    FROM dbo.foo
    WHERE bar LIKE N'%' + NCHAR(2028) + '%';

DROP TABLE dbo.foo;

Обратите внимание, что независимо от того, вставили ли мы одну или две строки, мы всегда возвращаем первую строку, даже если запрос один и тот же, а данные изменились.

К сожалению, вставка фактического значения NCHAR (2028) в SSMS не работает, потому что его нет в наборе поддерживаемых символов (я получаю глиф, похожий на вопросительный знак в Super Mario Brothers).В противном случае я бы просто предложил:

WHERE columnname LIKE N'%߬%';

Если вы можете сделать это из своего кода (и не беспокоиться о SSMS), это может быть работоспособной альтернативой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...