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

Откуда:
Сообщений: 6
всем привет.
есть прога, которая выбирает данные из таблицы аккаунтов по фамилии, имени и ДР. при поиске используется LIKE.
пользователь ищет Сорняк Иван 24-10-1972, запроc к базе идет как
select * from table_acc where FIRST_NAME like 'Иван%' and LAST_NAME='Сорняк%' and BIRTH_DATE='24-10-1972'
получаем:
Сорняк Иван 24-10-1972
Сорняков Иван 24-10-1972

нужно найти и посчитать вот такие похожие записи
что-то типа такого (конечно так не работает)
select *
from table_acc a1,table_acc a2
where a1.BIRTH_DATE=a2.BIRTH_DATE
and a1.LAST_NAME like a2.LAST_NAME%
and a1.FIRST_NAME like a2.FIRST_NAME%

поделитесь, пожалуйста, мыслями, как это можно оформить в запрос?
28 июн 17, 13:22    [20596534]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
msLex
Member

Откуда:
Сообщений: 7732
ksm54
нужно найти и посчитать вот такие похожие записи

Так вы же нашли их уже,
для "посчитать" просто * на count(*) замените.
28 июн 17, 13:26    [20596553]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
ksm54
Member

Откуда:
Сообщений: 6
msLex,
как раз и не нашли, нужно таблицу саму на себя завернуть со сравнением по LIKE, а LIKE так не работает.
28 июн 17, 13:30    [20596568]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
tashkafox
Member

Откуда: Москва
Сообщений: 104
msLex,
a2.LAST_NAME + '%'
28 июн 17, 13:31    [20596570]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
ksm54,

BIRTH_DATE какого типа?
А то пишете дату в очень специфическом формате
28 июн 17, 13:37    [20596592]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
ksm54
Member

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

увы, не то, находятся только одинаковые
28 июн 17, 13:50    [20596641]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
ksm54
Member

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

это для примера, формат 1961-02-04 00:00:00.0000000
28 июн 17, 13:51    [20596644]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
msLex
Member

Откуда:
Сообщений: 7732
ksm54
msLex,
как раз и не нашли, нужно таблицу саму на себя завернуть со сравнением по LIKE, а LIKE так не работает.


вам для каждой записи нужно найти количество "похожих" что-ли?



select a1.BIRTH_DATE, a1.LAST_NAME, a1.FIRST_NAME, count(*)
from table_acc a1,table_acc a2
where
a1.BIRTH_DATE=a2.BIRTH_DATE
and a1.LAST_NAME like a2.LAST_NAME + '%'
and a1.FIRST_NAME like a2.FIRST_NAME + '%'
group by a1.BIRTH_DATE, a1.LAST_NAME, a1.FIRST_NAME
28 июн 17, 13:59    [20596682]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
ksm54
iap,

это для примера, формат 1961-02-04 00:00:00.0000000
Я спросил про тип, а не какой-то "формат"
28 июн 17, 16:15    [20597315]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
ksm54
Member

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

да, надо посчитать сколько неоднозначных строк выдается при поиске с использованием LIKE
29 июн 17, 06:36    [20598403]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
ksm54
Member

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

datetime2(7)
29 июн 17, 06:37    [20598404]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
автор
да, надо посчитать сколько неоднозначных строк выдается при поиске с использованием LIKE


 SELECT COUNT(DISTINCT fiel1, field2,...) FROM 
29 июн 17, 11:13    [20598938]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
ksm54
iap,

datetime2(7)
В таком случае ваше строковое представление даты будет корректным не всегда.
Надо писать '1972-10-24'.
Или, как обычно, '19721024' или '1972-10-24T00:00:00.000'
29 июн 17, 11:31    [20599021]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Cammomile
автор
да, надо посчитать сколько неоднозначных строк выдается при поиске с использованием LIKE


 SELECT COUNT(DISTINCT fiel1, field2,...) FROM 
Это где такой синтаксис в MS SQL описан?
29 июн 17, 11:33    [20599038]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Где такой синтаксис я понятия не имею, если честно.

 DECLARE @Table table (TheName varchar(50))
 INSERT INTO @Table SELECT 'Иванов'
 INSERT INTO @Table SELECT 'Иванов'
 INSERT INTO @Table SELECT 'Иванов'
 INSERT INTO @Table SELECT 'Иванова'
 INSERT INTO @Table SELECT 'Каланова'
 INSERT INTO @Table SELECT 'Крузенштерн'

 SELECT COUNT( DISTINCT TheName)  FROM @Table WHERE TheName like '%ано%'
29 июн 17, 11:47    [20599104]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
А, я понял, там поля перечислять нелья. Ну тогда надо какой-то хэш мутить, раз автору на всю строку.
29 июн 17, 11:49    [20599111]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
Alibek B.
Member

Откуда:
Сообщений: 3533
distinctrow
29 июн 17, 12:16    [20599211]     Ответить | Цитировать Сообщить модератору
 Re: неточное сравнение данных по типу LIKE  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Alibek B., в сукульсервере?

 DECLARE @Table table (TheName varchar(50), age int)
 INSERT INTO @Table SELECT 'Иванов', 30 
 INSERT INTO @Table SELECT 'Иванов', 30 
 INSERT INTO @Table SELECT 'Иванов', 30 
 INSERT INTO @Table SELECT 'Иванова', 33 
 INSERT INTO @Table SELECT 'Каланова', 35
 INSERT INTO @Table SELECT 'Крузенштерн', 42 
 SELECT Count(1) FROM (
 SELECT TheName, age   FROM @Table WHERE TheName like '%ано%' 
 group by TheName, age ) KK 
29 июн 17, 13:21    [20599443]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить