Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Чуствительность к регистру при сравнении в Select  [new]
VKabanov
Member

Откуда:
Сообщений: 39
Есть задача найти с помощью с использованием параметра индекс слова в таблице - WordSheet.
SearchWord потом будет передаваться параметром при вызове из С#.

DECLARE @SearchWord VARCHAR(50)
  SET  @SearchWord = 'Server'
SELECT WordSheet.WordID
FROM
  dbo.WordSheet
  WHERE Word =@SearchWord


Содержимое таблицы WordSheet:
INT VARCHAR(50)
___________________
1 SQL
2 Database
3 database
4 Server
6 server

При выполнении сейчас возращает два результата 4 и 6, что как я понимаю зависит от где и с какими параметрами развернута БД.

Требуется, чтобы результатом возвращались либо
1) точные совпадения с учетом регистра
2) совпадения без учета регистра.

Как это сделать не меняя настрек БД и сервера, лишь меняя текст или ветви запроса?
13 апр 14, 17:51    [15875386]     Ответить | Цитировать Сообщить модератору
 Re: Чуствительность к регистру при сравнении в Select  [new]
VKabanov
Member

Откуда:
Сообщений: 39
Еще, я не знаю на каком языке будут вводиться слова в словарь и на каком языке они потом будут проверяться... Т.е. задавать COLLATE с причявязкой к языку нельзя.

Первое что приходит на ум для получения регистронезависимых это отправить одновременно в верхний или нижний регистр искомое и значения из поля таблицы, но это не айс при большой таблице. А вот что делать с регистрозависимым поиском вообще не понимаю.
13 апр 14, 17:57    [15875397]     Ответить | Цитировать Сообщить модератору
 Re: Чуствительность к регистру при сравнении в Select  [new]
o-o
Guest
VKabanov
Как это сделать не меняя настрек БД и сервера, лишь меняя текст или ветви запроса?

declare @WordSheet table (id INT, Word VARCHAR(50));
insert into @WordSheet(id, Word) values
(1,	'SQL'),	
(2,	'Database'),	
(3,	'database'),	
(4,	'Server'),	
(6,	'server')

DECLARE @SearchWord VARCHAR(50)
  SET  @SearchWord = 'Server'
SELECT *
FROM
  @WordSheet 
  WHERE Word =@SearchWord 
----------------------------------
id	Word
4	Server
6	server
  
SELECT *
FROM
  @WordSheet 
  WHERE Word =@SearchWord collate SQL_Latin1_General_CP1_CS_AS
----------------------------------
id	Word
4	Server
13 апр 14, 18:10    [15875441]     Ответить | Цитировать Сообщить модератору
 Re: Чуствительность к регистру при сравнении в Select  [new]
o-o
Guest
VKabanov
Еще, я не знаю на каком языке будут вводиться слова в словарь и на каком языке они потом будут проверяться... Т.е. задавать COLLATE с привязкой к языку нельзя.


VKabanov
Содержимое таблицы WordSheet:
INT VARCHAR(50)


у вас в таблице поле неюникодное и без указания коллейшена.
это значит, что никакой другой язык, кроме инглиша (ну или что там еще использует только латиницу) и того, что задан в коллэйшене базы,
в это поле корректно не ляжет. пишите туда смело коллэйшн базы

если нужны все языки мира, используйте NVARCHAR.
и тогда в запросе язык в Collate вообще неважен, а вот зато регистро(не)зависимость будет определяться этим самым Collate.
13 апр 14, 18:23    [15875483]     Ответить | Цитировать Сообщить модератору
 Re: Чуствительность к регистру при сравнении в Select  [new]
o-o
Guest
картинка про NVARCHAR

К сообщению приложен файл. Размер - 15Kb
13 апр 14, 18:32    [15875499]     Ответить | Цитировать Сообщить модератору
 Re: Чуствительность к регистру при сравнении в Select  [new]
VKabanov
Member

Откуда:
Сообщений: 39
Спасибо!
хочу уточнить, поменяв тип на NVARCHAR и используя collate SQL_Latin1_General_CP1_CS_AS я решу проблему с абсолютно любым заполнением таблицы на любом языке будь то хинди или тарашкевица?
13 апр 14, 18:39    [15875519]     Ответить | Цитировать Сообщить модератору
 Re: Чуствительность к регистру при сравнении в Select  [new]
o-o
Guest
VKabanov
Спасибо!
хочу уточнить, поменяв тип на NVARCHAR и используя collate SQL_Latin1_General_CP1_CS_AS я решу проблему с абсолютно любым заполнением таблицы на любом языке будь то хинди или тарашкевица?


да. постом выше подтверждающая картинка.
только не берите коллэйшн SQL_Latin1_General_CP1_CS_AS, впишите в запрос коллэйшн именно вашей базы,
сменив в нем CI на CS для регистрозависимого поиска.
13 апр 14, 18:46    [15875549]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить