我跟踪了这个帖子如何在SQL Server中执行重音不敏感的比较(e与è、é、êand a)?,但它并没有帮助我的“ş”,“ţ”字符。
如果城市名为“iaşi”,则不会返回任何内容:
SELECT *
FROM City
WHERE Name COLLATE Latin1_general_CI_AI LIKE '%iasi%' COLLATE Latin1_general_CI_AI如果城市名为“iaşi”(请注意类似模式的外国ş),也不会返回任何内容:
SELECT *
FROM City
WHERE Name COLLATE Latin1_general_CI_AI LIKE '%iaşi%' COLLATE Latin1_general_CI_AI我正在使用2012。
我的数据库和列排序规则是"Latin1_General_CI_AI",列类型是nvarchar。
我怎么才能让它起作用?
发布于 2014-03-14 16:30:14
您指定的字符不是Latin1代码页的一部分,因此除了Latin1_General_CI_AI中的序号之外,其他任何方式都不能对它们进行比较。事实上,我假设它们在给定的排序规则中根本不起作用。
如果您只使用一个排序规则,只需使用正确的排序规则(例如,如果您的数据是土耳其语,则使用Turkish_CI_AI)。如果您的数据来自许多不同的语言,则必须使用unicode和适当的排序规则。
然而,还有一个问题。在罗马尼亚语或土耳其语中,ş不是重音的s,而是一个完全不同的字符--参见AI.html。与之形成对比。š是s的一种重音形式。
如果确实需要ş来与s相等,则必须手动替换原始字符。
另外,当您使用unicode列(nvarchar和成串)时,请确保您也在使用unicode文本,即。使用N'%iasi%'而不是'%iasi%'。
发布于 2018-10-15 15:23:57
在Server 2008排序规则中,版本为100 引种。
整理Latin1_General_100_CI_AI似乎可以做你想做的事。
下列措施应能发挥作用:
SELECT * FROM City WHERE Name LIKE '%iasi%' COLLATE Latin1_General_100_CI_AI发布于 2014-03-14 15:56:42
我想这不是最简单的解决方案,但是如果您知道只有"ş“和"ţ”字符才是问题所在,那么进行替换是可以接受的吗?
SELECT *
FROM City
WHERE replace(replace(Name,'ş','s'),'ţ','t') LIKE COLLATE Latin1_general_CI_AI '%iasi%' COLLATE Latin1_general_CI_AIhttps://stackoverflow.com/questions/22409462
复制相似问题