Задача из учебника (примитивный запрос)

Сьюзи
Дата: 29.11.2006 12:32:32
Есть крошечная База с именем База, записей штук 10, к примеру(поля - имя, адрес, телефон).
Все поля текстовые. Для удобства все поля базы заполнены.
Никаких связей нет.
Запрос пишется в Accesse (в режиме SQL).
Задача:
Выберите записи, в которых номера телефонов пятизначные. При этом следует предусмотреть, что номера тел могут содрежать или нет дефисы, код региона в круглых скобках (не обязательно).

По исходным данным этот запрос должен выдавать непустой вариант (так подобраны исходные записи).
Я перебирала массу вариантов, все они выдают пустой вариант. Также заметила, что не все подстановочные знаки понимаются программой (не реагирует на %, но понимает *, к примеру). Если упрощать запрос (например, до варианта, когда требуется найти номер в определенном формате) , то опять выдается в ответе пустая запись.

Вопрос: какой запрос в данном случае верен?
Программист-Любитель
Дата: 29.11.2006 12:34:59
Тот, который выдаст правильные результаты.
Владимир Саныч
Дата: 29.11.2006 12:39:10
Разрешено ли писать функции и обращаться к ним?
Сьюзи
Дата: 29.11.2006 12:42:50
Программист-Любитель
Тот, который выдаст правильные результаты.

:))
Так ни один, который я использовала, не выдал правильных результатов. Ошибки не нахожу.
Как надо написать запрос в этой задаче?
Сьюзи
Дата: 29.11.2006 12:46:17
Владимир Саныч
Разрешено ли писать функции и обращаться к ним?


Это самые начала SQL и предполагается, что ученик владеет только логическими операторами, предикатами типа LIKE и т.п. и с функциями не знаком.
Сьюзи
Дата: 29.11.2006 12:50:12
К примеру, если мне нужно выбрать номер в формате #####, запрос вида
SELECT * FROM База WHERE телефон LIKE '#####';
выдает пустую запись ( а должен, как я думаю, запись как минимум с пятизначным номером типа 11111).
Программист-Любитель
Дата: 29.11.2006 12:58:15
Сьюзи
Это самые начала SQL и предполагается, что ученик владеет только логическими операторами, предикатами типа LIKE и т.п. и с функциями не знаком.

А ученик-то и не владеет...
Allll
Дата: 29.11.2006 13:51:34
Смущают дефисы...
Их положение фиксировано, надеюсь? :)

Попробуйте на ваших тестовых данных такой вариант запроса:
SELECT T1.Num
FROM T1
WHERE (((T1.Num) Like '#####' Or (T1.Num) Like '(*)#####' Or (T1.Num) Like '(*)#-##-##' Or (T1.Num) Like '#-##-##'));
Сьюзи
Дата: 29.11.2006 13:51:47
Программист-Любитель
Сьюзи
Это самые начала SQL и предполагается, что ученик владеет только логическими операторами, предикатами типа LIKE и т.п. и с функциями не знаком.

А ученик-то и не владеет...


Мне нужен ответ на конкретный вопрос. То есть написать запрос.

Я пытаюсь разобраться в особенностях SQL в Access, учебник ориентирован на "общие принципы SQL без приложений к конкретной среде".
Сегодня, например, выяснила, что CAST для символов не работает, а работает CStr.
Поэтому обозначенный в первом посте вопрос для меня важен (в учебнике предлагается готовый вариант ответа на подобную задачу, но в Access он не работает - то есть ошибок не выдает, но выполняется неверно). Хочу понять, в чем проблема - в подстановочных символах (как я уже писала про % и *), в реализации предикатов в разных средах или я допускаю ошибку в самом запросе.
Сьюзи
Дата: 29.11.2006 13:56:05
Allll
Смущают дефисы...
Их положение фиксировано, надеюсь? :)

Попробуйте на ваших тестовых данных такой вариант запроса:
SELECT T1.Num
FROM T1
WHERE (((T1.Num) Like '#####' Or (T1.Num) Like '(*)#####' Or (T1.Num) Like '(*)#-##-##' Or (T1.Num) Like '#-##-##'));


Был такой вариант и не работал. Хотя вроде должен работать.
Дело в том, что если упроситить задачу, и считать, например, что нужно найти только номера ###-##, то не работает (почему?) даже запрос с одним LIKE.