WHERE子句匹配阿拉伯字符串的问题

时间:2010-10-05 22:18:24

标签: sql-server database tsql unicode

我有一个SQL Server 2005数据库,其中有一些表包含阿拉伯文本。这些字段的数据类型为NVARCHAR(n)

表格中的阿拉伯文字显示正确,选择时,它们会正确显示。

问题是搜索阿拉伯语文本会产生0行。

select * from table_name
where name='arabic_text'

这将检索没有行,其中有一个具有此值的名称。

您能否指导我如何撰写查询?

3 个答案:

答案 0 :(得分:29)

尝试在文本之前添加N,例如

select * from table_name
where name=N'arabic_text'

答案 1 :(得分:2)

从table_name中选择* 其中N'%arabic_text%'这样的名称可以在这里使用

答案 2 :(得分:0)

如果您搜索单词احمد并且您的记录包含أحمد,即使您使用的是 like'%احمد%',查询也不会返回任何内容。 最好使用全文本搜索。

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 ) 
Query with Full-Text (Inflectional) 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