Выборка из базы по шаблону

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Выборка из базы по шаблону

Сообщение Tin » 19.07.2006 (Ср) 12:35

Что-то не могу сделать вот такой вот запрос:

в базе есть:
11.222.33.444
абв2.32.333.3
111.222.333.444
1.2.33.4
фф.ыы.вв.аа

нужно выбрать все значени я с цифрами (без букв):
11.222.33.444
111.222.333.444
1.2.33.4
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.07.2006 (Ср) 18:57

Да и не получится, в общем случае.
А нельзя завести вспомогательное поле и обновлять его при изменении значений? И отбор делать по нему.
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 19.07.2006 (Ср) 20:24

сделать такую функцию (и)
1.Убрать точки. взять Val
2. сранить повторно как строки.

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 20.07.2006 (Чт) 6:21

Вот такой вот запрос получилось сделат, но он не учитывает, если в середине записи будет буква:

SELECT * FROM I_D WHERE A like '*[0-9]' and A like '[0-9]*' ORDER BY A;
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.07.2006 (Чт) 9:05

а если так

Код: Выделить всё
SELECT * FROM I_D WHERE A NOT LIKE '*[!0-9]*' ORDER BY A;

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 20.07.2006 (Чт) 9:19

Такой вариант вообще не подходит - он выдаст все записи в которых есть хоть одна цифра в середине
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.07.2006 (Чт) 10:13

Tin писал(а):Такой вариант вообще не подходит - он выдаст все записи в которых есть хоть одна цифра в середине


а вы проверьте и посмотрите внимательно на оператор LIKE а точнее на шаблон выборки

вот моя проверка (MS SQL)
Код: Выделить всё
SELECT * (
   SELECT
      'asdffg4556cdgb' as a
   union all
   SELECT
      '1213423412' as a
   union all
   SELECT
      'asdffg4556cdgb' as a
   union all
   SELECT
      '1111111111b' as a
   union all
   SELECT
      '1111' as a
   union all
   SELECT
      'asdffg4556cdgb' as a
   union all
   SELECT
      '222' as a
   union all
   SELECT
      'qq22' as a
) b 
WHERE
   a not like '%[^0-9]%'


ответ
    1213423412
    1111
    222


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList