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

Откуда:
Сообщений: 22
Подскажите, как построить корректно фильтр для всех значений, которые начинаются на букву 'Я' или 'я'. На сервере используется COLLATE Cyrillic_General_CI_AS. Пример для буквы А или а ...

CREATE NONCLUSTERED INDEX [IND1] ON [dbo].[Table]
(
	[val] ASC
)
WHERE ([val]>='А' AND [val]<'Б')
16 апр 15, 15:19    [17524732]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Glory
Member

Откуда:
Сообщений: 104751
изучите LIKE
16 апр 15, 15:21    [17524749]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Влад Т.
Member

Откуда:
Сообщений: 22
Glory, в фильтре по индексу LIKE не поддерживается. Пробывал не получается.
16 апр 15, 15:36    [17524858]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Glory
Member

Откуда:
Сообщений: 104751
Влад Т.
Glory, в фильтре по индексу LIKE не поддерживается.

по началу поля - поддерживается
16 апр 15, 15:38    [17524870]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Влад Т.
Member

Откуда:
Сообщений: 22
Glory,

Сервер - Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64)
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


CREATE NONCLUSTERED INDEX [IND1] ON [dbo].[Table]
(
	[val] ASC
)
WHERE [val] LIKE 'Я%'


Error - Incorrect syntax near the keyword 'LIKE'.
16 апр 15, 15:46    [17524935]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Glory
Member

Откуда:
Сообщений: 104751
А с PATINDEX ?
16 апр 15, 15:59    [17525022]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
https://msdn.microsoft.com/ru-ru/library/ms188783(v=sql.100).aspx
<filter_predicate> ::=
{ <conjunct> [ AND <filter_predicate> ] }

<conjunct> ::=
{ <disjunct> | <comparison> }

<disjunct> ::=
{ column_name IN (constant ,...n ) }

<comparison> ::=
{ column_name <comparison_op> constant }

<comparison_op> ::=
{ IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< }
Выход один - ограничиться тем, что допустимо в синтаксисе.
16 апр 15, 16:02    [17525045]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Glory
А с PATINDEX ?
Если не ошибаюсь, допусимы условия, наложенные на поле, а не на функцию от поля.
Причем только IN(список констант), =, <>, >, <, >=, <=, IS NULL, IS NOT NULL
16 апр 15, 16:04    [17525058]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
не?
Guest
Влад Т.,

вычислимую колонку по принципу val like 'я%'?val:null
и простоиндекс по ней
16 апр 15, 16:10    [17525082]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Влад Т.
Member

Откуда:
Сообщений: 22
to iap,

по всем другим буквам работает, но мне нужен фильтр только по 'Я', тк данным очень много.
16 апр 15, 16:25    [17525175]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Влад Т.
to iap,

по всем другим буквам работает, но мне нужен фильтр только по 'Я', тк данным очень много.
Как работает, если LIKE нельзя использовать?
16 апр 15, 16:39    [17525254]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Влад Т.
Member

Откуда:
Сообщений: 22
iap,

работает без LIKE, я вначале давал рабочий пример для буквы 'А'. Просто у меня не получается также но для буквы 'Я'.
16 апр 15, 17:43    [17525715]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Влад Т.
iap,

работает без LIKE, я вначале давал рабочий пример для буквы 'А'. Просто у меня не получается также но для буквы 'Я'.
А какой коллейт и тип данных у val?
16 апр 15, 18:07    [17525824]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Влад Т.
На сервере используется COLLATE Cyrillic_General_CI_AS
use tempdb;
go

create table dbo.t (id int primary key, v varchar(100));
insert into dbo.t values (1, 'а'), (2, 'аб'), (3, 'я'), (4, 'яд'), (5, 'Яблоко'), (6, 'р');
create index IX_t__v on dbo.t(v) where v >= 'я';

set statistics xml on;
select * from dbo.t where v like 'я%'; 
set statistics xml off;

drop table dbo.t;
?
16 апр 15, 18:07    [17525825]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Влад Т.
Member

Откуда:
Сообщений: 22
invm,

Большое спасибо.

Я такое делал и все типа работает. Наверно я некорректно сформулировал вопрос - меня интересовало как записать правое граничное условие [val]>='Я' AND [val]<'???'
16 апр 15, 18:19    [17525875]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Влад Т.,

Так не нужно правого ограничения.
16 апр 15, 19:00    [17526013]     Ответить | Цитировать Сообщить модератору
 Re: Индекс с фильтром на Я  [new]
Влад Т.
Member

Откуда:
Сообщений: 22
invm,

Хорошо тогда тему закрыто.
16 апр 15, 19:41    [17526156]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить