首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server不区分大小写的查询

Server不区分大小写的查询
EN

Stack Overflow用户
提问于 2015-05-12 16:41:14
回答 1查看 1.8K关注 0票数 6

在使用Server比较查询中的字符串时,我希望忽略大小写。到目前为止,我可以这样做:

代码语言:javascript
复制
SELECT *
FROM Venue
WHERE
   Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

是否有一种方法来设置全局指令,使其能够影响每个查询?就像这样:

代码语言:javascript
复制
SET COLLATE Latin1_general_CI_AI;
SELECT *
    FROM Venue
    WHERE
       Name Like '%this%';
SELECT *
    FROM Venue
    WHERE
       Name Like '%that%';
...

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-12 19:30:02

是否有一种方法来设置全局指令,使其能够影响每个查询?

不是的。

排序规则不是应用于查询的会话属性,它不能动态更改。

这个请求的另一个问题是,区分大小写并不是一个可以自己启用或禁用的选项:它是排序规则的属性,就像重音敏感性、宽度敏感性、特定字母排列的顺序等。一个查询可以比较多个字段,每个字段都有不同的排序规则。因此,即使您可以设置对会话有效的排序规则,这也可能会迫使其他排序规则的列在不被请求时动态转换排序规则。全局会话设置还会影响排序(即TOP(n)、ORDER等),而不仅仅是影响比较。

由于问题是用户希望确定每次执行是否忽略部分排序规则,所以有几个选项,但所有选项都会导致一些性能损失:

  1. 在动态SQL中构造查询(或多个查询): 声明@SQL NVARCHAR(最大),@‘COLLATE(50);SET @ NVARCHAR(50);SET @’COLLATE= N‘’COLLATE 1_general_CI_AI‘;SET @SQL =N’‘SELECT*,名称为’+@‘COLLATE+N’LIKE‘%’+ @SearchParam +N‘%’+N ''%‘+@ @Collation;EXEC(@SQL);
  2. 在单字符范围内将每个字符转换为大写和小写对.对于正在搜索的参数值,可以在app层中这样做:
代码语言:javascript
复制
- For default case-sensitive (don't do anything):

@SearchParam = 'This‘

-对案件不敏感:

@SearchParam = 'tTiI‘

  1. 把所有的东西都放在同一个案子里。假设执行不区分大小写的选项是传入的附加参数: 从场地选择* CASE @CaseIn事敏感时1,然后更低(名称)其他名称结束,就像CASE @CaseIn灵敏度在1然后'%‘+较低( @SearchParam )+ '%’其他'%‘+@SearchParam+ '%’结束; 或者,在查询之前执行LOWER(): 如果(@CaseIn灵敏度= 1)开始设置为SET @SearchParam =较低( @SearchParam );结束;选择*从大小写@CaseIn事敏感的地点选择*当1,然后较低(名称)其他名称结束为'%‘+@SearchParam+ '%';
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30196848

复制
相关文章

相似问题

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