Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сравнить часть текста 
V
    Опции темы
MadCoder
Дата 27.5.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Здравствуйте!

У меня есть две таблички, одна с индексами, другая с префиксами индексов (первые три цифры).
Как мне выбрать для каждой записи из первой таблички строчку из второй таблицы.

1 таблица:
Имя:        | Индекс |
------------------------
Клиент 1 | 143312|
Клиент 2 | 185441|

2 таблица:

Индекс | Название
-----------------------------
140         Московская область
141         Московская область
142         Московская область
143         Московская область
185         Карелия
------------------------------


Должно получица:

Клиент 1 | Московская область
Клиент 2 | Карелия
PM WWW ICQ   Вверх
skyboy
Дата 27.5.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



индексы и их "префиксы" -  строки или числа?
вообще говоря, тебе надо использовать функцию проверки подстроки в строку.
префиксы индексов имеют одинаковую длину?

M
skyboy
Не забываем указывать СУБД!

PM MAIL   Вверх
Nuzur
Дата 27.5.2008, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Какая СУБД?

Если MSQL - SUBSTRING
Если Oracle - Substr

Остальное не подскажу.


--------------------
Never again...
PM MAIL   Вверх
Akina
Дата 27.5.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Вот что построил Аксесс:
Код

SELECT Таблица1.Имя, Таблица2.Название
FROM Таблица1, Таблица2
WHERE Left$([Таблица1]![Индекс],3)=[Таблица2]![Индекс];



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
MadCoder
Дата 27.5.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Числа. В делфи это должно выглядеть так:
If Copy(Text, 1,3)='123' then ....

Т.е. строго первые три цифры должны совпадать со списком, где именно эти трехзначные числа собраны.
PM WWW ICQ   Вверх
skyboy
Дата 27.5.2008, 20:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(MadCoder @  27.5.2008,  17:57 Найти цитируемый пост)
Числа. 

Цитата(MadCoder @  27.5.2008,  17:57 Найти цитируемый пост)
В делфи это должно выглядеть так:

а вот и фигу.
copy в delphi - строковая функция  smile 
вобщем, как и сказали товарищи, надо использовать зависящую от СУБД(почему не говоришь, какая УБД?! тайна, что ли?) функцию: substr, locate, left или адекватную.
учитывая, что у тебя поля - числа(зачем, кстати?), тебе сначала может понадобиться приводить значения полей к типу char/varchar через convert/cast или какой-то toStr(в зависимости от СУБД).
PM MAIL   Вверх
Akina
Дата 27.5.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(skyboy @  27.5.2008,  21:36 Найти цитируемый пост)
учитывая, что у тебя поля - числа(зачем, кстати?), тебе сначала может понадобиться приводить значения полей к типу char/varchar через convert/cast или какой-то toStr(в зависимости от СУБД). 

Ну если там числа, и индекс в первой таблице строго 6 цифр, а во второй 3, то можно и целочисленно поделить на 1000...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Deniz
Дата 28.5.2008, 05:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 6
Всего: 44



Подойдет для многих СУБД
Код

select Table1.Индекс, Table2.Наименование
from Table1, Table2
where cast(Table1.Индекс as varchar(10)) starting with cast(Table2.Префикс as varchar(10))
starting with можно заменить на 
Код
... like cast(Table2.Префикс as varchar(10)) || '%'



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
MadCoder
Дата 29.5.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: нет
Всего: 2



Спасибо, Всем, особенно Deniz, все замечательно работает. Обернул в функцию и получился следующий код:
И спасибо за ссылку на "Тренировка на www.sql-ex.ru" в подписи - давно искал, никак не мог отыскать smile.

Это сообщение отредактировал(а) MadCoder - 29.5.2008, 11:20
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.