首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较Server中的s,t和ş,ţ

比较Server中的s,t和ş,ţ
EN

Stack Overflow用户
提问于 2014-03-14 15:35:37
回答 5查看 4.9K关注 0票数 3

我跟踪了这个帖子如何在SQL Server中执行重音不敏感的比较(e与è、é、êand a)?,但它并没有帮助我的“ş”,“ţ”字符。

如果城市名为“iaşi”,则不会返回任何内容:

代码语言:javascript
复制
SELECT *
  FROM City
 WHERE Name COLLATE Latin1_general_CI_AI LIKE '%iasi%' COLLATE Latin1_general_CI_AI

如果城市名为“iaşi”(请注意类似模式的外国ş),也不会返回任何内容:

代码语言:javascript
复制
SELECT *
  FROM City
 WHERE Name COLLATE Latin1_general_CI_AI LIKE '%iaşi%' COLLATE Latin1_general_CI_AI

我正在使用2012。

我的数据库和列排序规则是"Latin1_General_CI_AI",列类型是nvarchar。

我怎么才能让它起作用?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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%'

票数 2
EN

Stack Overflow用户

发布于 2018-10-15 15:23:57

在Server 2008排序规则中,版本为100 引种

整理Latin1_General_100_CI_AI似乎可以做你想做的事。

下列措施应能发挥作用:

代码语言:javascript
复制
SELECT * FROM City WHERE Name LIKE '%iasi%' COLLATE Latin1_General_100_CI_AI
票数 2
EN

Stack Overflow用户

发布于 2014-03-14 15:56:42

我想这不是最简单的解决方案,但是如果您知道只有"ş“和"ţ”字符才是问题所在,那么进行替换是可以接受的吗?

代码语言:javascript
复制
SELECT *
FROM City
WHERE replace(replace(Name,'ş','s'),'ţ','t') LIKE COLLATE Latin1_general_CI_AI '%iasi%' COLLATE Latin1_general_CI_AI
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22409462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档