首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我使用LIKE运算符时,SQL-Server将忽略我的归类

当我使用LIKE运算符时,SQL-Server将忽略我的归类
EN

Stack Overflow用户
提问于 2013-05-21 08:34:25
回答 2查看 8.8K关注 0票数 4

我使用的是西班牙语数据库,所以当我在寻找和"aeiou“时,我也可以在where子句中得到"áéíóú”或"AEIOU“或”áéthis“,例如:

代码语言:javascript
复制
SELECT * FROM myTable WHERE stringData like '%perez%'

我的花费是:

代码语言:javascript
复制
* perez
* PEREZ
* Pérez
* PÉREZ

因此,我将数据库更改为排序规则: Modern_Spanish_CI_AI

我得到的只有:

代码语言:javascript
复制
* perez
* PEREZ

但如果我这么做了:

代码语言:javascript
复制
SELECT * FROM myTable WHERE stringData like '%perez%' COLLATE Modern_Spanish_CI_AI 

我得到了所有的结果,所以我的问题是,如果我的数据库是COLLATE Modern_Spanish_CI_AI,为什么我必须为我的查询设置相同的排序规则?

我使用的是SQL-Server 2008

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-21 08:43:47

您需要更改表列本身的排序规则。

代码语言:javascript
复制
select collation_name, *
from sys.columns
where object_id = object_id('tblname')
  and name = 'stringdata';

如果你幸运的话,它就像(示例)一样简单。

代码语言:javascript
复制
alter table tblname alter column stringdata varchar(20) collate Modern_Spanish_CI_AS

但是如果你有约束和/或模式绑定引用,事情就会变得很复杂。

使用具有混合排序规则的数据库可能非常困难,因此您可能需要重新排序所有表列。

票数 4
EN

Stack Overflow用户

发布于 2013-05-21 08:46:38

你可以用COLLATE,例如。

代码语言:javascript
复制
SELECT * 
FROM TableName
WHERE strData COLLATE Latin1_general_CI_AI = 'perez' COLLATE Latin1_general_CI_AI

两端必须具有相同的排序规则。

  • SQLFiddle Demo
  • SQLFiddle Demo ()

其他:

  • Selecting a SQL Server Collation
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16660346

复制
相关文章

相似问题

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