Как сравнить две арабские строки в оракуле?

У меня есть две строки:

a = 'على';
b = 'علي';

или

a = 'محمد';
b ='محــــــــــمد';

или

a= 'بُنْ'
b='بن'

a= 'يسرا'
b='يسرى'

и у меня уже есть данные в базе данных

Что я пробовал до сих пор:

Как я могу сравнить их и вернуть true? я не могу собрать все случаи

Возможный дубликат сравнение двух строк в SQL Server

Anas Alweish 28.05.2019 15:31

Что вы пробовали? Что случилось?

jarlh 28.05.2019 15:35

Вы не объяснили, что произошло, когда вы выполнили запрос. Я полагаю, вы получили ошибку, потому что STRCMP не существует в СУБД Oracle? Откуда вы берете значения?

Thorsten Kettner 28.05.2019 21:24

да, STRCMP не существует в СУБД Oracle и получить ошибку

Eman mohamed 29.05.2019 10:22
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
4
535
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

SELECT * FROM DUAL
WHERE a = b;

Строка будет возвращена, если они равны, и нет строк, если они не равны.

при сравнении a и b будет найдено, что a не равно b, но a = 'يسرا' и b= 'يسري' одинаковы, но с другим синтаксисом

Eman mohamed 29.05.2019 09:27
Ответ принят как подходящий

Вы можете использовать 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;

Eman mohamed 29.05.2019 09:10

Вы можете настроить значение «одинаковости», увеличив или уменьшив 75. Это в основном процент одинаковости.

gmiley 29.05.2019 12:38

Я использую его, но когда я пишу с форматированием арабского слова, результат не соответствует действительности. заменить Formation на арабском языке пустым в pl sql. Я пытаюсь выбрать TRANSLATE('عــــــلًــــــي', 'ُ', '') from dual; но вернуть ноль.

Eman mohamed 30.05.2019 09:45

@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/…

gmiley 30.05.2019 12:08

Вы можете использовать оператор сравнения = или функцию Oracle SQL DECODE для сравнения значений.

select case when 'على' = 'علي' then 'same' else 'different' end from dual;

select decode('على' ,'علي', 'same', 'different') from dual;

Другие вопросы по теме