проблема с совпадением предложения WHERE на арабской строке - PullRequest
16 голосов
/ 06 октября 2010

У меня есть база данных SQL Server 2005, в которой некоторые таблицы содержат арабский текст. Тип данных для этих полей: NVARCHAR(n).

Арабский текст внутри таблицы отображается правильно, и при выборе он отображается правильно.

Проблема в том, что поиск арабского текста приводит к 0 строкам.

select * from table_name
where name='arabic_text'

Это не возвращает строки, где есть имя с этим значением.

Подскажите, пожалуйста, как написать запрос?

Ответы [ 3 ]

29 голосов
/ 06 октября 2010

Попробуйте добавить N перед текстом, например

select * from table_name
where name=N'arabic_text'
2 голосов
/ 27 июня 2013

выбрать * из таблицы_имя где имя типа N '% arabic_text%' будет работать здесь

0 голосов
/ 09 мая 2019

Если вы ищете слово احمد и в ваших записях есть أحمد, ваш запрос ничего не даст, даже если вы используете вроде '% احمد%' . Лучше использовать полнотекстовый поиск.

DECLARE @SearchWord nvarchar(100)
SET @SearchWord = 'احمد'

DECLARE @SearchString nvarchar(100)
SET @SearchString = 'FormsOf(INFLECTIONAL, "' + @SearchWord + '")' 
--SET @SearchString =  @SearchWord 

SELECT Ar.[SuraID]
      ,Ar.[VerseID]
      ,Ar.[AyahText] as Arabic
      ,En.[AyahText] as English
  FROM [QuranDb].[dbo].[ArabicQuran] Ar
  join EnglishQuran En on En.ID=Ar.ID
  where   CONTAINS(ar.AyahText, @SearchString) 
 or  CONTAINS(En.AyahText, @SearchString ) 
Запрос с полнотекстовым (инфлекционным) enter image description here

Вот еще один пример использования CONTAINSTABLE CONTAINSTABLE link

DECLARE @SearchWord nvarchar(100)
SET @SearchWord = 'لا اله الا الله '

DECLARE @SearchString nvarchar(100)
SET @SearchString ='ISABOUT ("'+ @SearchWord+'")' 

SELECT K.RANK, Ar.AyahText,Ya.AyahText
FROM [ArabicQuran] AS Ar  
  INNER JOIN  
  CONTAINSTABLE([ArabicQuran], AyahText, @SearchString, LANGUAGE N'arabic'  ) AS K  
  ON Ar.ID = K.[KEY] 
  join EnQuranYusufAli Ya on ya.ID=Ar.ID
  order by k.RANK desc 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...