带有 IN 子句的区分大小写的搜索查询 - SQL Server

Leo*_*Leo -1 sql sql-server collate

我想在 SQL Server 环境中进行区分大小写的搜索。每当我使用如下所示的单独查询时,它都工作正常:

select * from table1 where flag = 'Yes' COLLATE sql_latin1_general_cp1_cs_as;
select * from table1 where flag = 'No' COLLATE sql_latin1_general_cp1_cs_as;
Run Code Online (Sandbox Code Playgroud)

但是,当我使用如下所示的 IN 子句时如何实现此功能:

select * from table1 where flag in ('Yes', 'No'); //This is returning all the flag vlaues like Yes, YES, NO, No
Run Code Online (Sandbox Code Playgroud)

use*_*983 5

就像你做的两个例子一样,使用COLLATE

SELECT *
FROM table1
WHERE flag COLLATE sql_latin1_general_cp1_cs_as IN ('Yes', 'No');
Run Code Online (Sandbox Code Playgroud)

  • COLLATE 子句可以防止使用索引,因此可以添加“AND flag IN ('Yes', 'No')”,以便可以通过索引查找来完成不敏感搜索,并使用区分大小写的谓词来进一步过滤行。 (2认同)