我需要从SQL Server表中提取FirstName字段中包含俄语或阿拉伯字符的所有记录 - 想知道如何在1个SQL查询中巧妙地执行此操作。 我为阿拉伯语尝试的是:
SELECT TOP 100 *
FROM MyTable
WHERE FirstName like N'%[أ-ي]%'
;
或
SELECT TOP 100 *
FROM MyTable
WHERE PATINDEX(N'%[أ-ي]%', FirstName)>0
;
有人可以建议它是否是一种有效的方法? 还请建议如何捕获包含俄语字母的字段。
谢谢! 米甲
答案 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
);
这种方法的唯一问题是“俄语”的定义。西里尔字符的子集用于许多东欧语言,其中只有一个实际上是俄语。其他人,例如保加利亚人和马其顿人(仅举几例)将使用相关子集的大部分,他们也将被标记为俄语,从而产生误报。
当然,如果您的表只包含这两种语言,那么这不会有问题,但通常您需要一个带语言指示符的单独字段。