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

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

SQL запрос


Evgeny ©   (2003-04-22 12:32:00) 

Посылается запрос вида:
select * from "base.dbf" where number="93101-23070-00"
но в таблице этот номер может быть записан в любом варианте:
9310123070 00
93101 2307000
93101-23070 00
931012307000
без прочерков, через пробелы (через любое количество) и вообще как угодно. Каким образом все-таки можно сделать выборку? Какие есть варианты?


Evgeny   (2003-04-22 13:25:00) [1]

Пересмотрел таблицы, там бред сивой кобылы.


Соловьев   (2003-04-22 13:15:00) [2]

я когда-то занимался разбором такого беспридела. Решил проблему где-то на 60-70% Всегда находилась Маня, которая то английские буквы вместо русских введет, то 31 февраля, то еще что-то...
Можно конечно попробовать отказаться от SQL и поработать с записями по очереди. Там и алгоритм соответсвуюющий можно выдумать. ИМХО, можно так:

1. сначала берем 5 цыфр. удаляем из анализируемой строки.
2. проверяем первый символ, если не цыфра, то удаляем. Если цыфра, то берем 5 цыфр. удаляем из анализируемой строки.
3. пункт 2.
Это конечно если кол-во цыфр фиксировано, если нет, но можно и там что-то выдумать...


Anatoly Podgoretsky   (2003-04-22 13:06:00) [3]

если количесто цифр в группах фиксировано (XXXXX-YYYYY-ZZ), то всегда можно форматировать на этапе занесения данных в базу или потом. Если делать ночью то не так страшно


Evgeny   (2003-04-22 13:05:00) [4]

Всем спасибо.


Соловьев   (2003-04-22 13:03:00) [5]


> Переделывать каждую неделю надоест слишком быстро, если
> только это все дело не автоматизировать

наверное такой

> 9310123070 00
> 93101 2307000
> 93101-23070 00
> 931012307000

беспредел автоматизировать не удастся... Но може ты что-то и придумаешь...


Evgeny   (2003-04-22 13:00:00) [6]

Бороться невозможно, таблицы поставляются готовые и обновляются очень часто. Переделывать каждую неделю надоест слишком быстро, если только это все дело не автоматизировать. Может это окажется самым приемлемым вариантом.


Соловьев   (2003-04-22 12:58:00) [7]


> но таблицы переделывать нельзя.

и не надо, создай новую(с новой структурой) и в нее единожды перенеси правильно данные.


Johnmen   (2003-04-22 12:57:00) [8]

>stone © (22.04.03 12:44)

Не думаю, что количество цифр в группах переменно.
И, конечно, надо пересмотреть подход...



Evgeny   (2003-04-22 12:56:00) [9]

Получается если делать так:
select * from "base.dbf" where number like "9%3%1%0%1%2%3%0%7%0%0%0"
конечно бред, но таблицы переделывать нельзя.


Соловьев   (2003-04-22 12:49:00) [10]

просто надо было правильно споректировать БД. Я так понимаю этот номер - "93101-23070-00", формируется из каких-то 3-х? Тогда просто надо было создать 3 поля, а сам номер выичслять... И все тогда исчется очень даже не плохо...


Anatoly Podgoretsky   (2003-04-22 12:49:00) [11]

В чем причина подобного беспорядка, может с ней бороться, а не с последствиями?


stone   (2003-04-22 12:44:00) [12]


> Johnmen © (22.04.03 12:41)
> like "93101%23070%00"

Этом случае результом окажуться также такие как этот
"93101 923070 200"


stone   (2003-04-22 12:42:00) [13]

Боюсь, что средствами Local SQL никак.
Правильнее исключить подобное разнообразие хранения информации в базе и пользоваться простым запросом
select * from "base.dbf" where number=:Param


Johnmen   (2003-04-22 12:41:00) [14]

like "93101%23070%00"


Наверх

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