Расширенный поиск символов ascii в SQL Server
У меня есть таблица, где один столбец может содержать данные, которые включают расширенные символы ASCII (например, ♥,♦,♣....
)
Когда я ищу то же самое, используя select
запрос набора результатов не выбирается точно для ex:
create table testasci(id int,name varchar(20))
insert into testasci values(1, 'santosh');
insert into testasci values(2, 'santosh♥');
insert into testasci values(3, 'santosh♦');
insert into testasci values(4, 'santosh2');
insert into testasci values(5, 'santoshσ');
insert into testasci values(6, 'santosh3');
Когда я ищу любое имя с расширенным символом ASCII, как показано ниже
select * from testasci where name = 'santosh♥'
набор результатов отображает id2, id3.
Это тоже с вопросительным знаком (?
) символ вместо исходного символа.
Любая помощь? Мой набор результатов должен отображать только id2
по вышеуказанному поисковому запросу
2 ответа
Проблема в том, что вводимые вами символы вообще НЕ находятся в диапазоне ASCII. VARCHAR(20)
неправильный тип данных столбца для ваших данных.
- Измените структуру таблицы
- Измените способ вставки
- Наконец, измените способ выбора
Исправлена:
create table testasci(id int,name nvarchar(20))
insert into testasci values(1,N'santosh');
insert into testasci values(2,N'santosh♥');
insert into testasci values(3,N'santosh♦');
insert into testasci values(4,N'santosh2');
insert into testasci values(5,N'santoshσ');
insert into testasci values(6,N'santosh3');
select * from testasci where name like N'santosh♥';
Глядя на ваше первоначальное определение varchar(20)
Я создал SQLFiddle, чтобы показать проблему.
select id, a.name, number, ascii(substring(a.name,number,1))
from testasci a
join master..spt_values v
on v.number between 1 and len(a.name) and type='P'
where a.id in (2,3)
order by id, number
Вы заметите, что 8-я позиция каждого из ID 2 и 3 содержит символ ASCII (63), который является буквальным знаком вопроса (?
), а не ваш специальный символ Unicode. Таким образом, вы потеряли его, как только он попал в столбец таблицы.
N
используется для поиска расширенных символов ascii
select * from testasci where name like N'santosh♥'