如何检索包含俄语或阿拉伯字符的记录?

时间:2014-10-06 13:48:36

标签: sql sql-server unicode

我需要从SQL Server表中提取FirstName字段中包含俄语或阿拉伯字符的所有记录 - 想知道如何在1个SQL查询中巧妙地执行此操作。 我为阿拉伯语尝试的是:

SELECT TOP 100 *
FROM MyTable
WHERE FirstName like N'%[أ-ي]%'
;

SELECT TOP 100 *
FROM MyTable
WHERE PATINDEX(N'%[أ-ي]%', FirstName)>0
;

有人可以建议它是否是一种有效的方法? 还请建议如何捕获包含俄语字母的字段。

谢谢! 米甲

1 个答案:

答案 0 :(得分:0)

嗯,实际上相对简单:

declare @a int = unicode(N'А'); -- 1040

declare @rus table (Letter nchar(3) collate Cyrillic_General_CI_AI primary key);

insert into @rus (Letter)
select top (32) N'%' + nchar(@a + row_number() over(order by (select null)) - 1) + N'%'
from master.dbo.spt_values;

--select * from @rus;

select *
from dbo.MyTable t
where exists (
    select 0 from @rus r where t.FirstName collate Cyrillic_General_CI_AI like r.Letter
);

这种方法的唯一问题是“俄语”的定义。西里尔字符的子集用于许多东欧语言,其中只有一个实际上是俄语。其他人,例如保加利亚人和马其顿人(仅举几例)将使用相关子集的大部分,他们也将被标记为俄语,从而产生误报。

当然,如果您的表只包含这两种语言,那么这不会有问题,但通常您需要一个带语言指示符的单独字段。