Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по SQL [D6, XP]


Neo ©   (2008-01-28 13:56:00) 

Товарищи, как сделать запрос  SELECT то-то FROM того-то WHERE то-то нечувствитеьным к регистру?


ketmar   (2008-01-28 17:34:00) [1]

>[17] homm ©(28.01.08 15:14)
>Это башка. В ней находится мозг.
оптимист.


Amoeba   (2008-01-28 17:28:00) [2]


> Neo ©   (28.01.08 15:03) [14]
>
>
> > вот как думаеш, что вернет функция UPPER(adum14) ? а UPPER(Adum14)
> > ?
>
>
> Конечно возвращает то, что должна возвращать - то же самое
> что при запросе ADUM14. т.е. это ф-ия уравнивает запросы
> adum14, Adum14 и ADUM14 единственно к верхнему регистру,
>  т.е. к ADUM14. А вот если искать как раньше - получается
> что при запросах Adum14 и adum14 результаты иные, чем когда
> использовать UPPER...

Надо же быть таким дубом после того как тебе неоднократно все разжевали и в рот положили.


altatr   (2008-01-28 17:09:00) [3]

В моей программе работает так (компонент Query) может подойдет...

          SQL.Add('SELECT NAME'); // по каким полям будем делать выборку
          SQL.Add('FROM ":AUTOBASE:voditeli.dbf"'); // в какой базе данных и таблице будем искать
          SQL.Add('WHERE');
          SQL.Add('(UPPER (NAME)= "'+ f +'")') // сравниваем поле NAME с переменной f

Переменной f присвоить значение какогонибудь EDITa у которого в свойстве CharCase  проставить ecUpperCase. Или самому писать все заглавными буквами. Какими будут буквы в поле NAME - всеравно. Программа будет видеть их все заглавными.


homm   (2008-01-28 15:14:00) [4]

> [14] Neo ©   (28.01.08 15:03)

Подними руки чуть выше туловища, начни сводить их вместе. Вскоре на их пути встретится некий шарообразный волосатый предмет. Это башка. В ней находится мозг. Попробуй использовать его при очередном фтыкании в одну единственную строчку кода из [7].

Помимо указанного способа можно еше указать формат регистронечувствительный для полей, по котрым производится поиск, или использовать функцию, специально-оговоренно-регистро-нечувствительную. Все зависит от возможностей твоего SQL сервера.


tomkat   (2008-01-28 15:05:00) [5]


> А вот если искать как раньше

так не нада :-)


Anatoly Podgoretsky   (2008-01-28 15:04:00) [6]

> Neo  (28.01.2008 14:37:12)  [12]

Чукча не читатель.


Neo   (2008-01-28 15:03:00) [7]


> вот как думаеш, что вернет функция UPPER(adum14) ? а UPPER(Adum14)
> ?


Конечно возвращает то, что должна возвращать - то же самое что при запросе ADUM14. т.е. это ф-ия уравнивает запросы adum14, Adum14 и ADUM14 единственно к верхнему регистру, т.е. к ADUM14. А вот если искать как раньше - получается что при запросах Adum14 и adum14 результаты иные, чем когда использовать UPPER...


tomkat   (2008-01-28 14:46:00) [8]

ты не вериш ?
ты попробуй !
вот как думаеш, что вернет функция UPPER(adum14) ? а UPPER(Adum14) ?


Neo   (2008-01-28 14:37:00) [9]

Товрищи, прога делается для бухов, у бухов там в полный финиш в смысле этих чертовых регистров.


> !!!! дак у тебя ВСЕ значения поля приводятся к верхнему
> регистру ! ВСЕ !!!
> и ты сравниваеш с образцом тоже в верхнем регистре ...


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


Palladin   (2008-01-28 14:29:00) [10]

в сад


tomkat   (2008-01-28 14:29:00) [11]


> Это же просто приводит к тому, что ищется в верхнем регистре
> и все

!!!! дак у тебя ВСЕ значения поля приводятся к верхнему регистру ! ВСЕ !!!
и ты сравниваеш с образцом тоже в верхнем регистре ...


Neo   (2008-01-28 14:27:00) [12]

> tomkat   (28.01.08 14:12) [7]
> where upper(Request)=upper('ADUM14')

Это же просто приводит к тому, что ищется в верхнем регистре и все... а мне нужно чтобы искало и в нижнем и в верхнем и комбинированно,т.е. чтобы, скажем, запросы adum14, ADUM14 и Adum14 воспринимались одиннаково.


Sergey13   (2008-01-28 14:13:00) [13]

> [5] homm ©   (28.01.08 14:05)

Лишь бы не фрикцию или фелляцию. 8-)


tomkat   (2008-01-28 14:12:00) [14]

where upper(Request)=upper('ADUM14')
а вообще-то нада запрос с параметрами использовать
where upper(Request)=upper(:param)


Neo   (2008-01-28 14:09:00) [15]

нет, в том то и дело что чувствителен - запрос типа 'SELECT COUNT(*) FROM '+TabName+' WHERE '+Request+' = ADUM14' и такой же самый только в конце пишем скажем Adum14, дают разные результаты, которые правильны оба, поскольку в базе встречается и так и так пишут - и верхним и нижним регистром... вот и я хочу сдлать чтобы было нечувствительно к регистру. Оператор же LIKE находит похожее, но все равно учитывает регистр - уже проверил.


homm   (2008-01-28 14:05:00) [16]

> [4] Sergey13 ©   (28.01.08 14:01)
> Надо сделать инъекцию,

Может лучше сделать коньюкцию? %)


Sergey13   (2008-01-28 14:01:00) [17]

> [0] Neo ©   (28.01.08 13:56)

Надо сделать инъекцию, переводящую и то и это к одному регистру.


tomkat   (2008-01-28 14:01:00) [18]

если ты имел ввиду, что не чуствительным к регистру значения ПАРАМЕТРОВ
то так и скажи :-)


tomkat   (2008-01-28 13:59:00) [19]

запрос вообще-то и так не чествителен к регистру
SELECT то-то FROM того-то WHERE  =
select
...
from
....
where
.....


Palladin   (2008-01-28 13:58:00) [20]

чего-то like того-то


Наверх

Титульная страница Поиск, карта сайта Написать письмо