Расширенный поиск символов 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) неправильный тип данных столбца для ваших данных.

  1. Измените структуру таблицы
  2. Измените способ вставки
  3. Наконец, измените способ выбора

Исправлена:

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♥'
Другие вопросы по тегам