У меня есть две строки:
a = 'على';
b = 'علي';
или
a = 'محمد';
b ='محــــــــــمد';
или
a= 'بُنْ'
b='بن'
a= 'يسرا'
b='يسرى'
и у меня уже есть данные в базе данных
Что я пробовал до сих пор:
Как я могу сравнить их и вернуть true? я не могу собрать все случаи
Что вы пробовали? Что случилось?
Вы не объяснили, что произошло, когда вы выполнили запрос. Я полагаю, вы получили ошибку, потому что STRCMP
не существует в СУБД Oracle? Откуда вы берете значения?
да, STRCMP не существует в СУБД Oracle и получить ошибку
SELECT * FROM DUAL
WHERE a = b;
Строка будет возвращена, если они равны, и нет строк, если они не равны.
при сравнении a и b будет найдено, что a не равно b, но a = 'يسرا' и b= 'يسري' одинаковы, но с другим синтаксисом
Вы можете использовать UTL_MATCH, в частности подпрограмму UTL_MATCH.EDIT_DISTANCE_SIMILARITY()
SELECT CASE
WHEN UTL_MATCH.EDIT_DISTANCE_SIMILARITY('على', 'علي') > 75
THEN 'Match' ELSE 'No Match' END as "Match Status"
FROM dual;
при использовании возвращаются разные, но два совпадения имени. SELECT CASE WHEN UTL_MATCH.EDIT_DISTANCE_SIMILARITY('محمد', 'محمــد') > 75 THEN 'Match' ELSE 'No Match' END as "Match Status" FROM dual;
Вы можете настроить значение «одинаковости», увеличив или уменьшив 75
. Это в основном процент одинаковости.
Я использую его, но когда я пишу с форматированием арабского слова, результат не соответствует действительности. заменить Formation на арабском языке пустым в pl sql. Я пытаюсь выбрать TRANSLATE('عــــــلًــــــي', 'ُ', '') from dual; но вернуть ноль.
@Emanmohamed Ваша база данных настроена на использование арабского набора символов или западноевропейского набора символов (WE8ISO8859P1)? Вы можете узнать, что вы используете в настоящее время, с помощью следующего утверждения: select * from database_properties where PROPERTY_NAME in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');
Если вы не используете набор арабских символов (AR8ISO8859P6), вы столкнетесь с трудностями при использовании многих этих функций/методов сравнения строк/слов/фраз. Чтобы изменить набор символов, посмотрите: docs.oracle.com/cd/B19306_01/server.102/b14225/…
Вы можете использовать оператор сравнения =
или функцию Oracle SQL DECODE
для сравнения значений.
select case when 'على' = 'علي' then 'same' else 'different' end from dual;
select decode('على' ,'علي', 'same', 'different') from dual;
Возможный дубликат сравнение двух строк в SQL Server