Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2015, 00:48   #1
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию Можно ли с помощью REGEXP осуществлять регистронезависимый поиск?

Можно ли с помощью REGEXP осуществлять регистронезависимый поиск?

например:

name
ЯБЛОКО
ЯБлоКо

SELECT * FROM table WHERE name REGEXP 'яблоко';

Как сделать чтобы искалось яблоко во всех регистрах?
Хотелось бы знать можно ли это сделать сразу в регулярном выражении REGEXP, без использования до запроса php, strtoupper()


Как вариант нашел что можно так сделать:

SELECT * FROM table WHERE name REGEXP UPPER('яблоко');

Но все же, есть ли в mysql REGEXP, как и в php, такое же /i правило?

Последний раз редактировалось Microplankton; 03.03.2015 в 08:24.
Microplankton вне форума Ответить с цитированием
Старый 03.03.2015, 01:01   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
REGEXP '(я|Я)(б|Б)(л|Л)(о|О)(к|К)(о|О)'
Может быть есть более простой способ
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.03.2015 в 01:06.
BDA на форуме Ответить с цитированием
Старый 03.03.2015, 01:11   #3
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
REGEXP '(я|Я)(б|Б)(л|Л)(о|О)(к|К)(о|О)'
Может быть есть более простой способ
"яблоко" это только пример, там переменная, в которой может быть длина до 255 символов.
Microplankton вне форума Ответить с цитированием
Старый 03.03.2015, 08:18   #4
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Можно ли с помощью REGEXP осуществлять регистронезависимый поиск?

например:

name
ЯБЛОКО
ЯБлоКо

SELECT * FROM table WHERE name REGEXP 'яблоко';

Как сделать чтобы искалось яблоко во всех регистрах?
Хотелось бы знать можно ли это сделать сразу в регулярном выражении REGEXP, без использования до запроса php, strtoupper()


Как вариант нашел что можно так сделать
UPPER = это верхний регистр
lower = нижний регистр
смотрите пример , вам надо lower
СУБД MySQL как вы хотели
Код:
create database DBTest;
/* -------------------- */
use DBTest 
 /*------------------------------*/
 create table Tab1
(
 P_Id int NOT NULL AUTO_INCREMENT,
 names varchar(40) not null,
 PRIMARY KEY (P_Id)
)
делаем инсерт
Код:
insert into Tab1(names) value('ЯБЛОКО')
insert into Tab1(names) value('яблоко')
insert into Tab1(names) value('ЧАЙ')
insert into Tab1(names) value('чай')
тепер мне надо поискать чай на пример
Код:
select * from Tab1 where lower(names)='чай'
или яблоко
Код:
select * from Tab1 where lower(names)='яблоко'
Думаю все понятно Удачного вам дня
Изображения
Тип файла: jpg chai.jpg (23.5 Кб, 161 просмотров)
Тип файла: jpg iablak.jpg (21.4 Кб, 120 просмотров)

Последний раз редактировалось xxbesoxx; 03.03.2015 в 08:27.
xxbesoxx вне форума Ответить с цитированием
Старый 03.03.2015, 09:43   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А regexp в мускуле разве регистрозависимый? Вот смотрю
Цитата:
REGEXP is not case sensitive, except when used with binary strings.
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2015, 10:14   #6
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А regexp в мускуле разве регистрозависимый? Вот смотрю

http://dev.mysql.com/doc/refman/5.0/en/regexp.html

да, регистронезависимый. Возможно есть нюансы из-за причин данной регистронезависимости, может влияние utf-8 или еще чего. Но вот смотрите на скрин:

SELECT * FROM lower2 WHERE name REGEXP('яблоко');


SELECT * FROM lower2 WHERE name='яблоко';
Microplankton вне форума Ответить с цитированием
Старый 03.03.2015, 10:24   #7
Microplankton
Пользователь
 
Аватар для Microplankton
 
Регистрация: 02.03.2015
Сообщений: 24
По умолчанию

+xxbesoxx Конечно спасибо, но твой вариант не подойдет ибо простой запрос where и так в моем случае ищет в любом регистре и без lower. А мне нужно обязательно регулярное выражение, так как условий в поиске очень много в моем запросе, единственное чтобы хотелось это регистронезависимость использовать.

Думаю что надо так, и все работает:
SELECT * FROM lower2 WHERE lower(name) REGEXP lower(('яблоко'));

Последний раз редактировалось Microplankton; 03.03.2015 в 10:28. Причина: изменено изображение запроса sql
Microplankton вне форума Ответить с цитированием
Старый 03.03.2015, 10:30   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

LIKE чем не устроил? По поводу regexp много обсуждений в сети его неадекватности
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.03.2015, 11:10   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а банальный LIKE не выручит?

например,
Код:
select * from ...  WHERE name like '%яблоко%'
выберет и ЯБЛОКО и яблоко и даже яБлОКО


p.s. а если нужен именно регистронезависимый regexp - то делайте приведение к одном регистру (хоть UPPER, хоть lower) и ищите.
Вполне себе годный выход.

Последний раз редактировалось Serge_Bliznykov; 03.03.2015 в 11:12.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регистронезависимый фильтр в TIBTable ifreestyler БД в Delphi 2 19.01.2015 12:50
Поиск тегов. RegExp soonner JavaScript, Ajax 1 14.09.2013 14:28
можно ли осуществлять вывод непосредственно на экран? Артэс Общие вопросы C/C++ 8 21.05.2010 20:08
С помощью чего можно реализовать? prod87 Общие вопросы Delphi 5 30.10.2009 17:15
С помощью чего можно создать программу rhaw Помощь студентам 8 05.02.2009 10:08