www.map-info.ru :: Просмотр темы - Создание сложной SQL выборки
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - ГИС 'MapInfo' Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
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(Наименование))
вернет часть из наименование, начиная с первого пробела.
Дальше думаю сами оформите запрос.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
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.

Кабы я обладал таким уровнем знаний в области програмирования так и не спрашивал бы Sad

В любом случае то что дали вы уже сильно упрощает мне задачу, БОЛЬШОЕ СПАСИБО!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - ГИС 'MapInfo' Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru