Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Помгите составить регулярное выражение


Автор: TheAviator 20.11.2004, 23:57
Собсно сабж.
Какой SQL - запрос позволяет отобразить записи с РОВНО пятью заданными символами в определенном поле?
Т.е., например, найти те поля, где есть РОВНО пять букв 'A' . Не больше.

Автор: Vit 21.11.2004, 17:12
Не уверен про MS Access, но попробуй что-нибудь типа:


Код

Select * From MyTable
Where MyFiled like '_____'

Автор: TheAviator 21.11.2004, 22:48
Цитата(Vit @ 21.11.2004, 17:12)
Не уверен про MS Access, но попробуй что-нибудь типа:


Код

Select * From MyTable
Where MyFiled like '_____'

Да. тип запроса такой в Акцессе катит, но я спрашивал о конкреном запросе для конкретного случая, т.е. конкретно шаблон для поиска РОВНО пяти цифр в поле.
Например, найти пять и более цифр будет в акцессе выглядеть так:
Select * From books
Where Name Like "*#*#*#*#*#*";

А вот РОВНО пять цифр???

Автор: Vit 22.11.2004, 01:28
Код

Select * From Таблица1
Where a Like "#####";



Если пять любых букв то

Код

Select * From Таблица1
Where a Like "?????";


Автор: TheAviator 22.11.2004, 11:22
ВИТ, ты опять не понял что я имею ввиду.

К примеру, запрос должен выбрать такую строку:

e1e2e3e4e5e (содержится ровно пять цифр)

но не должен выбрать
такую
e1e2e3e4e5e6e (шесть цифр)

как сам понимаешь, запрос типа Select * from books where name like "*#*#*#*#*#*"; выберет обе такие записи, а мне нужен такой запрос, который выберет только первую.

Автор: Vit 22.11.2004, 16:50
Такой запрос ИМХО невозможен даже на гораздо более развитых диалектах SQL, только вручную проходом по записям, а вообще надо при занесении данных озаботится о внесении их таким образом чтобы были поля поиска...

Впрочем одна мысль есть, толкьо не уверен что в MS Access есть соответтсвующие функции: в поле сначала заменить все буквы на пусто, потом получившееся число в строке конвертнуть в число и поставить условие чтоб было больше 9999 и меньше 100000

Автор: DENNN 22.11.2004, 17:14
Цитата
т.е. конкретно шаблон для поиска РОВНО пяти цифр в поле.

Насчет аксесса не знаю ( а читать документацию в лом smile ), но в других базах данных есть оператор, реализующий применение регулярного выражения к подаваемым на его вход данным (во как загнул! smile ).
То есть, если я хочу на MySQL использовать при выборке регулярное выражение для того, чтоб найти поля, в которых есть РОВНО ПЯТЬ ЦИФРр, то я пишу что-то примерно следующее.
Код

select field1 from my_table where field1=REGEXP '(?:(?:[^\d])*[\d]){5,5}';


Возможно регулярное выражение и далеко от совершенства, но как только речь заходит о рег.выражениях, то необъодимо читать документацию на используемый софт. Так, я сомневаюсь, что в приведенном примере MySQL поймет последовательность (?:, хотя без нее можно обойтись, но в продвинутых реализациях она может сильно ускорить обработку регулярного выражения.

P.S. навсякий случай: \d - означает любой символ, обозначающий цифру.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)