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

занялся изучением предикта LIKE
и озадачился регистрами
....
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами
при этом регистр не учитывается
возможно ли добиться того что бы регистр учитывался? это нужно прописывать в запросе? или же это связанно с настройками в моем случае MS SQL 2005 Management Studio?
30 май 13, 16:40    [14371469]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
молоко
при этом регистр не учитывается
а какой у Вас collation?
30 май 13, 16:41    [14371473]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
молоко
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами
Это верно не всегда. Зависит от COLLATE.
От него же и регистрозависимость.
LIKE '%[abcdefghijklmnjhqrstuvwxyz]%'COLLATE Cyrillic_General_CS_AS
или
LIKE '%[abcdefghijklmnjhqrstuvwxyz]%'COLLATE Cyrillic_General_BIN
30 май 13, 16:48    [14371500]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
Паганель
молоко
при этом регистр не учитывается
а какой у Вас collation?

к сожалению я пока не разобрался где это посмотреть, обязательно поищу


iap
молоко
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами
Это верно не всегда. Зависит от COLLATE.
От него же и регистрозависимость.
LIKE '%[abcdefghijklmnjhqrstuvwxyz]%'COLLATE Cyrillic_General_CS_AS
или
LIKE '%[abcdefghijklmnjhqrstuvwxyz]%'COLLATE Cyrillic_General_BIN


Cyrillic_General_CS_AS, COLLATE Cyrillic_General_BIN
если не затруднит объясните пожалуйста собственно что это? имя какой то библиотеки?
30 май 13, 16:54    [14371538]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
молоко
где это посмотреть
https://www.sql.ru/faq/faq_topic.aspx?fid=13
30 май 13, 16:56    [14371547]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Glory
Member

Откуда:
Сообщений: 104760
молоко
если не затруднит объясните пожалуйста собственно что это? имя какой то библиотеки?

Это параметер для фразы COLLATE
30 май 13, 16:58    [14371560]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
молоко
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами

Вы не правы. Это условие выбирает имена, в которых есть хотя бы одна латинская буква.
Условие задачи у вас какое?
30 май 13, 17:00    [14371571]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гость333
молоко
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами

Вы не правы. Это условие выбирает имена, в которых есть хотя бы одна латинская буква.
Условие задачи у вас какое?
Это почему же я неправ?
Я, конечно, не в курсе, какие в мире collationы бывают
(весь список не видел и не анализировал), но диапазон определяется именно там.
Конкретно для английских букв, может, это всегда работает.
Но в общем случае - нет.
30 май 13, 17:07    [14371605]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гость333
молоко
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами

Вы не правы. Это условие выбирает имена, в которых есть хотя бы одна латинская буква.
Условие задачи у вас какое?
Действительно, я не вчитался про "только с латинскими буквами"...
Но и диапазонами лучше не увлекаться
30 май 13, 17:09    [14371620]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
Гость333
молоко


Вы не правы.
Это почему же я неправ?

А вы — правы
30 май 13, 17:16    [14371665]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гость333
iap
пропущено...
Это почему же я неправ?

А вы — правы
Ясно же, что я уже заметил, что лажанулся,
отвечая на сообщение, адресованное не мне :))

молоко, посмотрите на это:
WHERE NOT LIKE '%[^a-z]%'COLLATE Cyrillic_General_BIN
Это условие для строк, содержащих только маленькие английские буквы.
30 май 13, 17:24    [14371719]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
Паганель
молоко
где это посмотреть
https://www.sql.ru/faq/faq_topic.aspx?fid=13

по поводу collation так и не нашел, что установлено. обновлять не представляется мне возможным, т.к. нет прав.

Гость333
молоко
where name like '%[a-z]%' - условие при котором выбираются имена только с латискими буквами

Вы не правы. Это условие выбирает имена, в которых есть хотя бы одна латинская буква.
Условие задачи у вас какое?

мой замысел отобрать имена
1. с только латинскими буквами, содер только маленькие буквы
2. с только латинскими буквами, содер только большие буквы
3. с только латинскими буквами не учитывающие регистр. а т.к. зависит от COLLATE и только в частных случаях выбирает по умолчанию без регистра, то можно ли прописать именно такое условие, которое задаст параметр, что бы не влиять на регистры.

iap

молоко, посмотрите на это:
WHERE NOT LIKE '%[^a-z]%'COLLATE Cyrillic_General_BIN
Это условие для строк, содержащих только маленькие английские буквы.


пробую это вводить в запросе, все равно ищет не учитывая регистр, так понимаю это связано на прямую с отсутствием collation в самом MS SQL..?
наткнулся на статью и вот, что увидел
"^ - который с сочетании с квадратными скобками исключает из поискового образца символы из набора или диапазона."
[url=]http://www.sql-tutorial.ru/ru/book_predicate_like/page2.html[/url]
'%[^a-z]%' - т.е. не будет содержать в тексте от a до z? а NOT LIKE делает обратное для '%[^a-z]%' ?
по поводу COLLATE Cyrillic_General_BIN - параметр указывающий на регистрозависимость.
я совершенно запутался, но Вам отвечающие доверяю больше, и во всяком случае благодарю за помощь.
31 май 13, 09:21    [14373679]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
молоко
пробую это вводить в запросе, все равно ищет не учитывая регистр
Покажите запрос
31 май 13, 09:29    [14373704]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
iap
молоко
пробую это вводить в запросе, все равно ищет не учитывая регистр
Покажите запрос


select name
from dbo.s_name
WHERE name NOT LIKE '%[^a-z]%'COLLATE Cyrillic_General_BIN

заработало!:)
просто в первый раз я забыл после WHERE name написать
31 май 13, 10:33    [14374061]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
WHERE name NOT LIKE '%[^a-z]%'COLLATE Cyrillic_General_BIN

работает по принципу:
1. NOT LIKE - выбирает то, что обратно условию '%[^a-z]%'
2. '%[^a-z]%' - условие при котором будут выбираться только те имена, которые вкл в себя мален. латин. буквы
3. COLLATE Cyrillic_General_BIN - так сказать вкл.\активизирует регистрозависимость
я правильно понял? хотя кажется, что то не то надумал:) все как обычно гораздо проще, только я еще не дошел до этого)
31 май 13, 10:52    [14374182]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
молоко
2. '%[^a-z]%' - условие при котором будут выбираться только те имена, которые вкл в себя мален. латин. буквы

Это условие выбирает те имена, в которые входит хотя бы один символ, не являющийся латинской буквой.
То есть условие NOT LIKE '%[^a-z]%' выбирает имена, в которых не содержится ни одного символа, не являющегося латинской буквой. Убирая из описания все "не", получаем "имена, в которых все символы — латинские буквы".
31 май 13, 11:23    [14374415]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
молоко,

посмотрите здесь: http://msdn.microsoft.com/ru-ru/library/ms143726(v=sql.105).aspx
31 май 13, 11:27    [14374440]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
Гость333
молоко
2. '%[^a-z]%' - условие при котором будут выбираться только те имена, которые вкл в себя мален. латин. буквы

Это условие выбирает те имена, в которые входит хотя бы один символ, не являющийся латинской буквой.
То есть условие NOT LIKE '%[^a-z]%' выбирает имена, в которых не содержится ни одного символа, не являющегося латинской буквой. Убирая из описания все "не", получаем "имена, в которых все символы — латинские буквы".

Да, извиняюсь, я ошибся. это условие при котором искл латин буквы
Для чего идти от противного, почему не сделать:
LIKE '%[a-z]%'

почему это будет считаться ошибкой?
важно оставить знак '^'? именно поэтому делается NOT LIKE
31 май 13, 13:18    [14375422]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
молоко
почему не сделать:
LIKE '%[a-z]%'
Никакой ошибки.
SELECT 'Ok!' WHERE 'Строка из одних английских букв w' LIKE '%[a-z]%'
31 май 13, 13:24    [14375471]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
молоко
[Для чего идти от противного, почему не сделать:
LIKE '%[a-z]%'

почему это будет считаться ошибкой?

Потому что это условие ищет в строке первый попавшийся латинский символ. Остальные символы при этом могут быть кириллицей, цифрами, знаками препинания и вообще чем угодно.
Поэтому надо искать, а не входит ли в строку нелатинский символ, и отбрасывать такие строки.
31 май 13, 13:25    [14375482]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
с NOT LIKE-ами и '^' теперь понятно, спасибо за объяснения)
а вот пробую у себя с кириллицей:

select name
from dbo.s_name
where name not like '[^а-я]'COLLATE Cyrillic_General_BIN
--
select name
from dbo.s_name
where name not like '[^А-Я]'COLLATE Cyrillic_General_BIN

выводится все имена и с большими и с маленькими буквами
1. по причине что COLLATE Должен быть другой?
на всякий случай пробовал поставить COLLATE Cyrillic_General_CI_AS :)
31 май 13, 13:49    [14375664]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
так попробуйте:
name not like '%[^а-я]%' COLLATE Cyrillic_General_BIN
31 май 13, 13:54    [14375699]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
молоко
Guest
Гость333
так попробуйте:
name not like '%[^а-я]%' COLLATE Cyrillic_General_BIN


select name
from dbo.s_name
where name not like '%[^а-я]%'COLLATE Cyrillic_General_BIN

результат что строк не найдено, в принципе именно такой и должен быть вывод на мой взгляд, так как имена с большой буквы начинаются
а вот когда делаю такой запрос:
select name
from dbo.s_name
where name not like '%[^а-я]%'

вывод не учитывающий регистр
выводятся только имена больше похожие на аббревиатуру, думаю это из-за того что имена большая часть которых из двух трех слов вида 'ЗАО Транспорт' и между ними есть пробел. возможно ли как то обойти это? пробелы
31 май 13, 14:05    [14375779]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
молоко
с NOT LIKE-ами и '^' теперь понятно, спасибо за объяснения)
а вот пробую у себя с кириллицей:

select name
from dbo.s_name
where name not like '[^а-я]'COLLATE Cyrillic_General_BIN
--
select name
from dbo.s_name
where name not like '[^А-Я]'COLLATE Cyrillic_General_BIN


выводится все имена и с большими и с маленькими буквами
1. по причине что COLLATE Должен быть другой?
на всякий случай пробовал поставить COLLATE Cyrillic_General_CI_AS :)
CI - это первые буквы от Case Insensitive
Для регистрозависимых COLLATE характерно наличие _CS_ (Case Sensitive)
31 май 13, 14:09    [14375814]     Ответить | Цитировать Сообщить модератору
 Re: Предикт LIKE с учетом и без учета регистра  [new]
Гость333
Member

Откуда:
Сообщений: 3683
молоко
возможно ли как то обойти это? пробелы

where name not like '%[^а-я ]%'
31 май 13, 14:10    [14375822]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить