Non-case sensitive запрос
От: Kai  
Дата: 28.08.02 12:04
Оценка:
Вопрос, а как сдклать сабж? Пример:
select some_field from some_table
where another_field /*строковое поле!*/="AAAAAA";
Хочется, чтобы не учитывался регистр букв у этого "AAAAAA"
Re: Non-case sensitive запрос
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 28.08.02 12:07
Оценка:
Здравствуйте Kai, Вы писали:

Kai>Вопрос, а как сдклать сабж? Пример:

Kai>select some_field from some_table
Kai>where another_field /*строковое поле!*/="AAAAAA";
Kai>Хочется, чтобы не учитывался регистр букв у этого "AAAAAA"

А база какая? Вот пример реальных запросов к моей базе (MS SQL Server 7.0):


SELECT * FROM CLientNames WHERE ClientName='Lana'
SELECT * FROM CLientNames WHERE ClientName='LaNa'
SELECT * FROM CLientNames WHERE ClientName='laNa'
SELECT * FROM CLientNames WHERE ClientName='LANA'


Результаты одинаковы — регистр не учитывается...
Re: Non-case sensitive запрос
От: vav Россия  
Дата: 28.08.02 12:08
Оценка: 3 (1)
select some_field from some_table
where UPPER(/*строковое поле!*/)=UPPER("AAAAAA");
Re[2]: Non-case sensitive запрос
От: Kai  
Дата: 28.08.02 12:16
Оценка:
Здравствуйте Flamer, Вы писали:


F>А база какая? Вот пример реальных запросов к моей базе (MS SQL Server 7.0):

Sybase SQL Anywhere

F>
F>SELECT * FROM CLientNames WHERE ClientName='Lana'
F>SELECT * FROM CLientNames WHERE ClientName='LaNa'
F>SELECT * FROM CLientNames WHERE ClientName='laNa'
F>SELECT * FROM CLientNames WHERE ClientName='LANA'
F>


F>Результаты одинаковы — регистр не учитывается...

Просто LANA — короткое слово, поэтому так мадо вариантов перебора
Re[2]: Non-case sensitive запрос
От: Kai  
Дата: 28.08.02 12:18
Оценка:
Здравствуйте vav, Вы писали:

vav>select some_field from some_table

vav>where UPPER(/*строковое поле!*/)=UPPER("AAAAAA");
Спасибо!
Re[3]: Non-case sensitive запрос
От: Andrey_N  
Дата: 28.08.02 18:31
Оценка:
Здравствуйте Kai, Вы писали:

Kai>Здравствуйте vav, Вы писали:


vav>>select some_field from some_table

vav>>where UPPER(/*строковое поле!*/)=UPPER("AAAAAA");
Kai>Спасибо!

Ne zabivajte, chto ispolzovanie funkcii na pole ne pozvolajet ispol'zovat' index.
variant resheniya -- 2 polja + trigger. Odno dlya osnovnogo znacheniya, vtoroye indexirovannoe dly UPPER. Vtoroye pole obnovlyaetsa v triggere. Togda:

vash zapros:
select some_filed from some_table
where upper_string_field_indexed = upper("AAAA")


obnovlenie:
update some_table set string_filed = "AaAaAa"


trigger (psevdo sintaxis, Ya poslednee vremya s Oraclom rabotayu):
create trigger on insert, update of some_table as
begin
  update inserted set upper_string_field_indexed = UPPER( some_field )
end


Nadeyus' vi naydete eto poleznim.
Andrey

PS sorry for translit
Re: Non-case sensitive запрос
От: Maxis Россия http://www.fotki.com/maxis/
Дата: 16.04.04 12:31
Оценка:
Встречный вопрос:
база: MS SQL Server.
Как сделать case-sensitive запрос.
Т.е. действительно
select * from Table where field='xxx'
Возвращает записи где filed='XXX' и 'xXx' и т.д.

как это настраивается?
Re[2]: Non-case sensitive запрос
От: Merle Австрия http://rsdn.ru
Дата: 16.04.04 12:47
Оценка: 2 (1)
Здравствуйте, Maxis, Вы писали:

M>как это настраивается?

Через COLLATION.

Collation может быть Case Sensitive — в названии есть _CS_ или Insensitive — в названии _CI_. Например, Cyrillic_General_CS_AI — обращает внимание на регистр, а Cyrillic_General_CI_AI — не обращает.


Таким образом, запрос вида
select * from Table where field COLLATE Cyrillic_General_CS_AI ='xxx'

Отберет только xxx, но не XXX и XxX.

Можно так же поменять COLLATION в отдельно взятом поле таблицы (с помощю ALTER TABLE) или во всей базе (ALTER DATABASE).
Мы уже победили, просто это еще не так заметно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.