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

Откуда:
Сообщений: 94
Здравствуйте, подскажите имеется некоторое количество строк содержащих имя и отчество (в одном поле) в одной таблице и некоторое количество строк содержащих только имя в другой, как организовать выборку по условию, что имена в обоих таблицах совпадают?
13 дек 16, 19:04    [19999179]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
iljy
Member

Откуда:
Сообщений: 8711
ss777,

like
13 дек 16, 19:13    [19999205]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
ss777
Member

Откуда:
Сообщений: 94
ну и что like?
13 дек 16, 19:14    [19999209]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
ss777
Member

Откуда:
Сообщений: 94
как его применить при сравнении двух полей, а непохожести одного поля на, то что указано для like
13 дек 16, 19:19    [19999223]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
buven
Member

Откуда:
Сообщений: 792
ss777,

Если имя и фамилия с разделителем - сделайте join по substring начиная с начала строки до charindex разделителя и начиная с charindex разделителя до (len(строка) - chrindex) .
Это если если нет уверенности, в каком порядке фамилия и имя записаны. Если есть - то один из этих вариантов.

Что-то в таком духе должно получиться, нужные условия после on сами накрутите.
select * from table1 t1 left join table2 t2 on substring(t1.Field1,0,5) = t2.Field1 


Долго, без индексов, но видимо задача разовая, так что сойдет.
13 дек 16, 19:24    [19999239]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
ss777
Member

Откуда:
Сообщений: 94
t1 t2
Иван Иванович = Иван
Андрей Николаевич = Андрей

Я так понимаю любой substring вводит жестко заданное количество символов для сравнения.
13 дек 16, 19:30    [19999257]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
ss777
Member

Откуда:
Сообщений: 94
Вобщем методом тыка и забугорным форумам разобрался

SELECT * FROM m_data, p_data WHERE m_data.SURNAME = p_data.SURNAME and m_data.NAME LIKE '%' + p_data.NAME +'%'


m_data.surname и p_data.surname содержат фамилию
m_data.name содержит имя отчество в одном поле, а p_data.name только имя
13 дек 16, 19:36    [19999276]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
aleks2
Guest
ss777
Здравствуйте, подскажите имеется некоторое количество строк содержащих имя и отчество (в одном поле) в одной таблице и некоторое количество строк содержащих только имя в другой, как организовать выборку по условию, что имена в обоих таблицах совпадают?

- Петька, приборы!

iljy
ss777,

like

- 200, Василий Иванович!!!

ss777
ну и что like?

- Чего 200?!

- А чего приборы?!!
14 дек 16, 05:50    [20000306]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
Jaffar
Member

Откуда:
Сообщений: 633
ss777
Вобщем методом тыка и забугорным форумам разобрался

SELECT * FROM m_data, p_data WHERE m_data.SURNAME = p_data.SURNAME and m_data.NAME LIKE '%' + p_data.NAME +'%'


m_data.surname и p_data.surname содержат фамилию
m_data.name содержит имя отчество в одном поле, а p_data.name только имя



лучше так:
SELECT * 
FROM m_data, p_data 
WHERE 
          m_data.SURNAME = p_data.SURNAME 
and     m_data.NAME LIKE p_data.NAME +' %'
14 дек 16, 06:42    [20000335]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
buven
Member

Откуда:
Сообщений: 792
ss777
t1 t2
Иван Иванович = Иван
Андрей Николаевич = Андрей

Я так понимаю любой substring вводит жестко заданное количество символов для сравнения.


И?
with rec1 (FIO) as (
select 'Иван Иванович'
union
select 'Андрей Николаевич'
union
select 'Фома Лукич'

),
rec2  (Name) as (
select 'Иван'
union
select 'Андрей'
union 
select 'Арсений')
select * from rec1 t 
	left join rec2 t2 on substring(FIO, 1,charindex(' ',FIO)-1)=t2.Name


Мне кажется это быстрее чем Like будет...
Или фиолетово?
14 дек 16, 15:07    [20002863]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строку с частью другой строки  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
WITH
t1 AS (
  SELECT
    [fio]
  FROM (
    VALUES
      ( 'Иванов Иван Иванович' ),
      ( 'Федоров Андрей Николаевич' ),
      ( 'Брут Андрей Иванович' ),
      ( 'Гетьман Фома Лукич' )
    ) t([fio])
),
t2 AS (
  SELECT
    [i]
  FROM (
    VALUES
      ( 'Иван' ),
      ( 'Андрей' ),
      ( 'Арсений' )
    ) t([i])
)
SELECT 
  * 
FROM 
  t2
  INNER JOIN t1 ON (
    '. ' + LTRIM( RTRIM( t1.[fio] ) ) + ' .' LIKE '% ' + LTRIM( RTRIM( t2.[i] ) ) + ' %' )
14 дек 16, 16:39    [20003474]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить