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

Откуда:
Сообщений: 51
Здравствуйте!
Как сделать запрос с использованием LIKE так,что бы он выводил только строки , где первая буква в верхнем регистре? Или в нижнем.

Спасибо.
1 авг 13, 09:22    [14646553]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
volkforlive,
declare @t table(s varchar(100))

insert  into @t values ('Арбуз'),('ананас'),('ябЛОко'),('Груша'),('apple'),('Orange')

select *
from @t
where s COLLATE Cyrillic_General_BIN LIKE '[А-Я,A-Z]%'
1 авг 13, 09:31    [14646588]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Ruuu,

а запятая там зачем? :))
1 авг 13, 09:55    [14646680]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
volkforlive
Member

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

в моей таблице почему то не выводится ни одна строчка..

SELECT TOP 1000 [ID]
      ,[Name]
     
      ,[City]

      ,[Email]
     
  FROM [Table].[dbo].[Person] 
  WHERE [Name] COLLATE Cyrillic_General_BIN LIKE '[А-Я,A-Z]]%'
  
  
1 авг 13, 09:59    [14646706]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
volkforlive,

а если убрать второй "]"? :) и запятую тоже, как уже сказал iap она лишняя
1 авг 13, 10:04    [14646734]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
volkforlive,

Тип Name какой?
1 авг 13, 10:06    [14646749]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
volkforlive
Member

Откуда:
Сообщений: 51
  WHERE [Name] COLLATE Cyrillic_General_BIN LIKE '[А-Я]%'


Вот так заработало!
Спасибо!
1 авг 13, 10:06    [14646754]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
А что за кодировка Cyrillic_General_BIN ?
1 авг 13, 10:42    [14646991]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
defragmentator
А что за кодировка Cyrillic_General_BIN ?
Это не кодировка.
А сами на вопросы не отвечаете из принципа?
1 авг 13, 10:52    [14647078]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
defragmentator
Member

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

я не отвечаю на те вопросы, ответы на которые не знаю.

В связи с этим спрашиваю, чем collation Cyrillic_General_BIN выдающимся отличается, что с ней LIKE отрабатывает как надо?
1 авг 13, 11:19    [14647316]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
defragmentator
iap,

я не отвечаю на те вопросы, ответы на которые не знаю.

В связи с этим спрашиваю, чем collation Cyrillic_General_BIN выдающимся отличается, что с ней LIKE отрабатывает как надо?
Что, тип поля Name неизвестен?
Впрочем, это уже неинтересно.
1 авг 13, 11:20    [14647329]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
defragmentator
iap,

я не отвечаю на те вопросы, ответы на которые не знаю.

В связи с этим спрашиваю, чем collation Cyrillic_General_BIN выдающимся отличается, что с ней LIKE отрабатывает как надо?

это правило сравнения в котором символы регистрозависимы в отличии от правила по умолчанию.
1 авг 13, 11:24    [14647359]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
defragmentator
Member

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

если Вам неинтересно, это Ваши личные проблемы
1 авг 13, 11:25    [14647364]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31863
iap
Что, тип поля Name неизвестен?
Вы перепутали defragmentator и volkforlive :-)
1 авг 13, 11:31    [14647415]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
defragmentator
А что за кодировка Cyrillic_General_BIN ?
Это не кодировка.
А сами на вопросы не отвечаете из принципа?

Мне кажется, вы путаете defragmentator'а с автором темы.
1 авг 13, 11:32    [14647423]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
alexeyvg
iap
Что, тип поля Name неизвестен?
Вы перепутали defragmentator и volkforlive :-)
Ой! Прошу прощения! Неловко получилось...
1 авг 13, 11:33    [14647436]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
defragmentator
Member

Откуда:
Сообщений: 20504
Мистер Хенки
это правило сравнения в котором символы регистрозависимы в отличии от правила по умолчанию.


declare @t table(s varchar(100))

insert  into @t values ('Арбуз'),('ананас'),('ябЛОко'),('Груша'),('apple'),('Orange')

select *
from @t
where s COLLATE Cyrillic_General_BIN LIKE '[А-Я,A-Z]%'



Получаю:

Арбуз
Груша
Orange


declare @t table(s varchar(100))

insert  into @t values ('Арбуз'),('ананас'),('ябЛОко'),('Груша'),('apple'),('Orange')

select *
from @t
where s COLLATE Cyrillic_General_CS_AS LIKE '[А-Я,A-Z]%'


Получаю:

Арбуз
ябЛОко
Груша
Orange

В чём разница?
1 авг 13, 11:35    [14647443]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
defragmentator,

в коллейшене Cyrillic_General_BIN символы отсортированы АБВ...Яабв...я

в Cyrillic_General_CS_AS аАбБ...яЯ

во втором случае придется прописывать [АБВГДЕ...Я]
1 авг 13, 11:42    [14647514]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
defragmentator,

разница в том, что символы упорядочиваются в COLLATION *_BIN в порядке двоичных кодов этих символов.
А в COLLATION *_CS_AS - примерно так же, но с некоторыми нюансами в правилах сравнения:
http://collation-charts.org/mssql/mssql.0419.1251.Cyrillic_General_CS_AS.html
1 авг 13, 11:42    [14647516]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
Ruuu
defragmentator,

в коллейшене Cyrillic_General_BIN символы отсортированы АБВ...Яабв...я

в Cyrillic_General_CS_AS аАбБ...яЯ

во втором случае придется прописывать [АБВГДЕ...Я]
declare @t table(s varchar(100))

insert  into @t values ('Арбуз'),('ананас'),('ябЛОко'),('Груша'),('гриб'),('apple'),('Orange'), ('orange'),('onion'),('')

select *
from @t
WHERE s COLLATE Cyrillic_General_BIN LIKE '[А-ЯA-Z]%'
ORDER BY s COLLATE Cyrillic_General_BIN

select *
from @t
WHERE s COLLATE Cyrillic_General_CS_AS LIKE '[А-ЯA-Z]%'
ORDER BY s COLLATE Cyrillic_General_CS_AS

select *
from @t
WHERE s COLLATE Cyrillic_General_CS_AS LIKE '[АБВГДЕЁЖЗ]%'
ORDER BY s COLLATE Cyrillic_General_CS_AS
1 авг 13, 11:43    [14647527]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
Поэтому нельзя полагаться на диапазоны в LIKE.
Только в бинарном COLLATION
1 авг 13, 11:44    [14647533]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
iap
Member

Откуда: Москва
Сообщений: 47083
SELECT number,CHAR(number) FROM master.dbo.spt_values WHERE type='P' AND number BETWEEN 32 AND 254 ORDER BY CHAR(number) COLLATE Cyrillic_General_BIN;
SELECT number,CHAR(number) FROM master.dbo.spt_values WHERE type='P' AND number BETWEEN 32 AND 254 ORDER BY CHAR(number) COLLATE Cyrillic_General_CS_AS;
1 авг 13, 11:53    [14647610]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
defragmentator
Мистер Хенки
это правило сравнения в котором символы регистрозависимы в отличии от правила по умолчанию.


declare @t table(s varchar(100))

insert  into @t values ('Арбуз'),('ананас'),('ябЛОко'),('Груша'),('apple'),('Orange')

select *
from @t
where s COLLATE Cyrillic_General_BIN LIKE '[А-Я,A-Z]%'



Получаю:

Арбуз
Груша
Orange


declare @t table(s varchar(100))

insert  into @t values ('Арбуз'),('ананас'),('ябЛОко'),('Груша'),('apple'),('Orange')

select *
from @t
where s COLLATE Cyrillic_General_CS_AS LIKE '[А-Я,A-Z]%'


Получаю:

Арбуз
ябЛОко
Груша
Orange

В чём разница?

ну так ябЛОко же.
Хотите все записи из примера получить то
select *
from @t
WHERE s COLLATE Cyrillic_General_CS_AS LIKE '[а-Яa-Z]%'
ORDER BY s COLLATE Cyrillic_General_CS_AS
1 авг 13, 11:56    [14647637]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
хм... Срабатывает where s COLLATE Cyrillic_General_CS_AS LIKE '[А-ЮЯA-Z]%'
В общем, не пойми как работает:)
1 авг 13, 12:00    [14647669]     Ответить | Цитировать Сообщить модератору
 Re: Оператор Like и регистр букв  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3683
volkforlive
Здравствуйте!
Как сделать запрос с использованием LIKE так,что бы он выводил только строки , где первая буква в верхнем регистре? Или в нижнем.

Спасибо.

where ascii(lower(substring(text,1,1))) <> ascii(substring(text,1,1))
1 авг 13, 12:00    [14647670]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить