我有一个SQL Server 2005数据库,其中有一些表包含阿拉伯文本。这些字段的数据类型为NVARCHAR(n)
。
表格中的阿拉伯文字显示正确,选择时,它们会正确显示。
问题是搜索阿拉伯语文本会产生0行。
select * from table_name
where name='arabic_text'
这将检索没有行,其中有一个具有此值的名称。
您能否指导我如何撰写查询?
答案 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 )
这是使用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