Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Velius
Зарегистрирован: 14.05.2012 Сообщения: 10
|
Добавлено: Чт Мар 28, 2013 7:27 am Заголовок сообщения: Создание сложной SQL выборки |
|
|
Есть такая проблема, может профи она покажется смешной, но для меня это не так.
Итак суть вопроса:
1. Имеем таблицу к примеру водоводы, список полей и информация в которой выглядит вот так:
Создаю SQL запрос такого типа:
Получаю на выходе такую выборку:
В ней почти все так как нужно, но....
Нужно то же самое но чтобы в поле "Параметры" вместо скажем:
"Водопровод подземный,сталь,114"
получалось:
"подземный,сталь,114"
То есть без части текста, в запросе надо исключить для вывода текста в результирующей выборке часть текста что есть в информации в поле "Наименование"
Думал как то с помощью оператора "NOT" но ничего не вышло, к тому же выбор сложный не однозначный надо выкинуть не только слово
"Водовод" но и слово "Водопровод"
Подскажите как составить запрос. |
|
Вернуться к началу |
|
|
Velius
Зарегистрирован: 14.05.2012 Сообщения: 10
|
Добавлено: Чт Мар 28, 2013 8:05 am Заголовок сообщения: |
|
|
Ну так что есть у кого решение вопрос ГОРЯЩИЙ |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Мар 28, 2013 9:51 am Заголовок сообщения: |
|
|
Вот такая конструкция
Mid$(Наименование, InStr(1, Наименование, " ")+1, Len(Наименование))
вернет часть из наименование, начиная с первого пробела.
Дальше думаю сами оформите запрос. |
|
Вернуться к началу |
|
|
Velius
Зарегистрирован: 14.05.2012 Сообщения: 10
|
Добавлено: Чт Мар 28, 2013 9:55 am Заголовок сообщения: |
|
|
Андрей Могильный писал(а): |
Вот такая конструкция
Mid$(Наименование, InStr(1, Наименование, " ")+1, Len(Наименование))
вернет часть из наименование, начиная с первого пробела.
Дальше думаю сами оформите запрос. |
Не плохой вариант... работает только не очень понятно по какому принципу...
А все таки возможен ли запрос ИМЕННО с исключением какого либо слова из информации колонки?
Как я и написал ВЕСЬ текст брать из поля "Наименование" КРОМЕ того что мне не нужно. Ну скажем исключив как и написал "Водовод" и "Водопровод"
Имено по принципу исключения того что мне не нужно а не по пробелу.
Это нужно потому что в этом поле не все названия имеют такой вид как
"Водопровод подземный"
"Водовод подземный"
Есть варианты и типа:
"Подземный водовод"
А так же такие в которых не надо ничего исключать:
"Точка смены диаметра"
Тоесть из первого должно получиться второе(если исключить слова, водовод, водопровод):
"Подземный водовод" - "Подземный"
"Водопровод подземный" - "подземный"
"Водовод подземный" - "подземный"
"Точка смены диаметра" - "Точка смены диаметра"
По этому интересует схема именно исключения одного или нескольких сразу типов слов причем из любой части текста
А так же второй вариант когда НЕ ИСКЛЮЧАЯ это слово а наоборот вывести ТОЛЬКО ЭТО СЛОВО, вырезав все остальные, например в случае:
"Водопровод подземный"
"Водовод подземный"
"Подземный водовод"
"Точка смены диаметра"
Показать в итоговой выборке только: Водовод или водопровод, чтобы получить:
"Подземный водовод" - "водовод"
"Водопровод подземный" - "водопровод"
"Водовод подземный" - "водовод"
"Точка смены диаметра" - "НИЧЕГО" |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Мар 28, 2013 11:33 am Заголовок сообщения: |
|
|
Mid$(Наименование, 1, InStr(1, LCase$(Наименование), "водовод")-1) +
Mid$(Наименование, InStr(1, LCase$(Наименование), "водовод")+Len("водовод")+1, Len(Наименование))
как-то так исключится слово "водовод". Нужно отладить, могут быть +/- символы или пробелами где разбавить надо будет.
Почитайте документацию MapBasic, раздел строковые функции. Потренеруйтесь на вырезании в Excel (с помощью его функций), потом просто переведете свои наработки в Excel на язык MapBasic. |
|
Вернуться к началу |
|
|
Velius
Зарегистрирован: 14.05.2012 Сообщения: 10
|
Добавлено: Чт Мар 28, 2013 11:43 am Заголовок сообщения: |
|
|
Андрей Могильный писал(а): |
Mid$(Наименование, 1, InStr(1, LCase$(Наименование), "водовод")-1) +
Mid$(Наименование, InStr(1, LCase$(Наименование), "водовод")+Len("водовод")+1, Len(Наименование)) |
Нет он таким образом не ищет слово водовод и не исключает его а просто режет столько символов сколько есть в этом слове, это я понял потому что слово "водопровод" не однокоренное принимает вид "вод подземный"
Андрей Могильный писал(а): |
как-то так исключится слово "водовод". Нужно отладить, могут быть +/- символы или пробелами где разбавить надо будет. |
не исключается
Андрей Могильный писал(а): |
Почитайте документацию MapBasic, раздел строковые функции. Потренеруйтесь на вырезании в Excel (с помощью его функций), потом просто переведете свои наработки в Excel на язык MapBasic. |
Кабы я обладал таким уровнем знаний в области програмирования так и не спрашивал бы
В любом случае то что дали вы уже сильно упрощает мне задачу, БОЛЬШОЕ СПАСИБО!!! |
|
Вернуться к началу |
|
|
|