powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SOUNDEX() c Кирилицей.
12 сообщений из 12, страница 1 из 1
SOUNDEX() c Кирилицей.
    #34525951
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Возникла необходимость поиска двойников, то есть найти похожие записи , типа НАТАЛ Ь Я и НАТАЛ И Я. Основной массив людей находится в базе DB2 порядка 2,5 млн записей. Когда приносят массив, скажем так неопознанных людей порядка несколько сотен. То приходится основной массив выгружать на клиента. И уже при помощи самопальной функции аналога SOUNDEX() идет анализ. Ну тут в плане безопасности, запрещают выгружать основной массив на клиентскую станцию, требуют маленький массив наоборот грузить на сервер DB2 и проверять средствами DB2. До сегоднешнего дня думал, что функция SOUNDEX() в DB2 для работы с кирилицей ни как не приспособлена, но сделал запрос и допустим SOUNDEX('НАТАЛЬЯ') = SOUNDEX('НАТАЛИЯ'), хотя функция DIFFERENCE('НАТАЛЬЯ','НАТАЛИЯ') возвращают 1, а вроде как должен 4.
Для эксперемента выполнил такой запрос
Код: plaintext
SELECT name , COUNT(*) cnt FROM master.register WHERE SOUNDEX(name)=SOUNDEX('НАТАЛЬЯ') GROUP BY name
и полученный результат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
НАТА	         11 
НАТАВАН	          4 
НАТАДЬЯ	           1 
НАТАЛБЯ	           1 
НАТАЛДЬЯ         1 
НАТАЛИ	           6 
НАТАЛИИ           1 
НАТАЛИНА         2 
НАТАЛИЯ	      6995 
НАТАЛКА	           2 
НАТАЛТЬЯ          1 
НАТАЛЬ	           1 
НАТАЛЬИЯ          1 
НАТАЛЬКА          1 
НАТАЛЬЯ	     73763 
НАТАЛЬЯДР        1 
НАТАЛЬЯЧ          1 
НАТАН	            3 
НАТАНЫЭЛЬ        1 
НАТАПЛЬЯ           1 
НАТАТЛЬЯ           2 
НАТАТЬСЯ           1 
НАТАТЬЯ	            4 
НАТАША	           36 
НАТАЬЯ	            1 
НАТТА	            3 
В принципе приемлемый результат, но все равно есть ощущение , что где-то должна быть засада при работе с этой функцией. Может кто-то для подобных задач, использует другие решения. Буду признателен за советы.
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34529086
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
ну вообще-то для выполнения ETL есть специальные инструменты. Которые покрывают и поставленную задачу.
другой вопрос, что они стОят... Вот тут-то и приходит идея о самописном решении...
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34530525
тлгдшлщм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Берешь делаешь функцию TRANSLIT
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34531301
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В DB2 есть функция, которая определят является ли символ буквой или цифрой, что то вроде
ISALPHA() и ISDIGIT(). Или что-то свое придумывать надо.
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34531318
тлгдшлщм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет пишешь функцию или ищешь в интернете
которая переводит Наташа в Natasha
Щелково в Schelkovo ....
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34532082
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создаю cвою UDF, например SOUNDRUS(). Где ее разместить, чтобы при ее вызове не указывать перед ее именем название схемы где она находится?
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34532155
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegA67Создаю cвою UDF, например SOUNDRUS(). Где ее разместить, чтобы при ее вызове не указывать перед ее именем название схемы где она находится?В динамическом sql неквалифицированные имена функций ищутся в списке схем (слева на право до совпадения имени, кол-ва и типов параметров), указанном в регистровой переменной CURRENT PATH.
По умолчанию ее значение равно "SYSIBM","SYSFUN","SYSPROC","имя_пользователя".
Установить ее значение можно командой SET PATH. Например:
SET PATH = CURRENT PATH,MY_SCHEMA
Можно установить через db2cli.ini
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34534508
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinМожно установить через db2cli.ini
А в какой секции прописывать?
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34534967
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegA67Можно установить через db2cli.ini
А в какой секции прописывать?В секции, относящейся к вашей БД.
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34535062
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прописал в db2cli.ini следующее
[REGION48]
DBALIAS=REGION48
SchemaList="’PRG’"

Переконектился к базе, набираю команду
Код: plaintext
SELECT soundrus('ОЛЕГ') kod FROM sysibm.sysdummy1
выходит ошибка что такая функция не найдена, а так
Код: plaintext
SELECT PRG.soundrus('ОЛЕГ') kod FROM sysibm.sysdummy1

Что сделал не так?
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34535381
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OlegA67Что сделал не так?
Код: plaintext
1.
2.
[REGION48]
DBALIAS=REGION48
CurrentFunctionPath="PRG"
...
Рейтинг: 0 / 0
SOUNDEX() c Кирилицей.
    #34538577
OlegA67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Mark Barinstein
Это то что было нужно
Код: plaintext
1.
[REGION48]
CurrentFunctionPath="SYSIBM","SYSFUN","PRG"
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SOUNDEX() c Кирилицей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]