Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
degtyarev.denis
Member

Откуда:
Сообщений: 7
Добрый день всем!
Возникла необходимость сравнения двух столбцов из разных таблиц для выявления совпадений. Данные в этих столбцах отличаются тем что у некоторых номеров вначале номера стоит 8 или 7 или вообще номер начинается с кода.

Пробовал делать следующий запрос

select substring(столбец1, 2, 10)
from table1
where столбец1 in (select substring(столбец2, 2, 10) from table2)

при выполнении данного запроса выявляется только часть совпадений. а именно те которые нужны не выявляются. Выполнял два селекта по отдельности номера выводились абсолютно одинаково.
База на SQL 2000.
Прошу по возможности помочь чем сможете.
Заранее спасибо.
20 июн 12, 15:45    [12746786]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
degtyarev.denis,

select substring(столбец1, 2, 10)
from table1
where substring(столбец1, 2, 10) in (select substring(столбец2, 2, 10) from table2)
20 июн 12, 15:48    [12746801]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
degtyarev.denis, приведите сначала значения столбцов в этих таблицах к одному виду(в вирт таблице), а потом сравнивайте их.
20 июн 12, 15:49    [12746813]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
degtyarev.denis
у некоторых номеров вначале номера стоит 8 или 7 или вообще номер начинается с кода.

Если "начинается с кода", то почему substring только со 2ой позиции ?
20 июн 12, 15:53    [12746862]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
degtyarev.denis
Member

Откуда:
Сообщений: 7
Glory, есть номера начинающиеся с 8 или 7, а есть номера которые начинаются с кода
20 июн 12, 16:17    [12747073]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
degtyarev.denis
Glory, есть номера начинающиеся с 8 или 7, а есть номера которые начинаются с кода

И что ?
Как substring(столбец2, 2, 10) отделяет этот "код" ?
20 июн 12, 16:19    [12747091]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
degtyarev.denis
Glory, есть номера начинающиеся с 8 или 7, а есть номера которые начинаются с кода

вам же намекают на то что нужно те номера, которые начинаются с кода преобразовать к другому виду, иначе грошь цена этим сравнениям.
20 июн 12, 16:33    [12747210]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
nezhadnye_my
Guest
если все номера без кодов и префиксов фиксированной длины, можно так
(у меня считается, что длина номера 7):

declare @t1 table (n varchar(12));
declare @t2 table (n varchar(12));

insert into @t1 (n) values ('1234567')
insert into @t2 (n) values ('2234567')
insert into @t2 (n) values ('71234567')
insert into @t2 (n) values ('81234567')
insert into @t2 (n) values ('(333)1234567')

select * 
from @t1 t1 join @t2 t2 on left(REVERSE(t1.n), 7) = left(REVERSE(t2.n), 7)
20 июн 12, 16:35    [12747232]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
+ советую удалить все символы за исключением цифр для более корректного сравнения. Например символ из таблицы АSCII с номером 32 может изрядно попить вашей крови.
20 июн 12, 16:39    [12747288]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
ещё хуже , если это символ с кодом 160
20 июн 12, 16:56    [12747431]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
degtyarev.denis
Member

Откуда:
Сообщений: 7
Александр52, "приведите сначала значения столбцов в этих таблицах к одному виду(в вирт таблице), а потом сравнивайте их. "

не подскажите как это сделать. Я если честно не очень то дружу с SQL.
20 июн 12, 17:05    [12747518]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
degtyarev.denis, например если у вас код города 12345 то ставьте перед кодом символ пробел у тех записей которые начинаются с 12345 like '12345%', предварительно удалив все символы не цифры(not like '[0-9]'). Затем замените при помощи replace ' 12345' на вашу первую цифру и сравнивайте. Таким образом вы замените код города на нужную вам цифру. Только смотрите на размеры этих апдейтов.


и не принимайте выше написанное за аксиому, подумайте прежде сами : )
20 июн 12, 17:24    [12747683]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
edyaN
Member

Откуда: Berlin
Сообщений: 185
degtyarev.denis,

обычно достаточно сравнить последние 6-7 цифр.

создайте новое (вычисляемое?) поле в таблице:
alter table1
add short_num varchar (10)
go

update table1
set short_num = right(full_num, 7)


а дальше все становится просто :)
при желании можно остаток слева от номера сохранить в отдельном столбце, чтобы иметь возможность вручную проверить сомнительные случаи
20 июн 12, 17:55    [12747958]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
degtyarev.denis
Member

Откуда:
Сообщений: 7
Всем большое спасибо. Ваши советы очень помогли. В итоге получился следующий запрос:

select a.fio, right(a.phone1, 9) b.phone2
from table1 AS a, table2 AS b
where right(a.phone1, 9) in (select right(b.phone1, 9))
20 июн 12, 22:10    [12749230]     Ответить | Цитировать Сообщить модератору
 Re: Сравнение двух столбцов с номерами телефонов из разных таблиц  [new]
degtyarev.denis
Member

Откуда:
Сообщений: 7
Как оказалось все довольно таки просто. Когда знаешь что делать!!
20 июн 12, 22:14    [12749255]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить