从拉丁字符获取西里尔文结果

时间:2014-04-30 16:13:49

标签: sql sql-server

我在sql server中有一个数据库,我正在尝试使用LIKE函数搜索一些结果。

示例:

Column1
"abc"
"абц"

如您所见,拉丁语和西里尔语都有。

我的问题:

是否有可能这样的查询:select * from table1 where column1 like '%ab%'(或'%аб%')给我两个结果?

更多信息:我在asp.net上创建一个网站,我需要这个搜索。我正在使用vs2012和sql server 2008。

感谢。

1 个答案:

答案 0 :(得分:1)

LIKE行为取决于整理,在您的情况下必须为Cyrillic_General_CI_AS

CI表示不区分大小写。所以这意味着,例如'Ö'和'''将在searshes中被视为相同。 AS代表重音敏感。无论如何,这对西里尔文没有任何意义。

据我所知,整理中没有任何内容可以描述拉丁字符如何映射到西里尔字母。 这是问题所在: 拉丁'c'应该映射到西里尔语'''或'c',或'к',或'ч'?或者也许'''因为它是字母表中的第3个? 西里尔字母“ц”应该映射到拉丁语“c”还是“z”?

但是,这可以在ASP.NET网站的业务层中执行。 您可以根据业务需求自由设置映射。 每当用户将“ab”作为参数传递时 - 您可以从中创建一对“ab”和“аб”,并将它们传递给您的存储过程或即席查询:

select *
from table1
where column1 like '%ab%' or column1 like '%аб%'

P.S。请注意,如果您有数百万条记录,那么在您的搜索字词之前拥有%会很慢: LIKE 'ab%'可以使用索引搜索,LIKE '%ab%'不能。