SQL服务器在whereexpression式中忽略大小写

如何构造一个SQL查询(MS SQL Server)where where子句不区分大小写?

SELECT * FROM myTable WHERE myField = 'sOmeVal' 

我想要结果回来忽略案件

在SQL Server数据库的默认configuration中,string比较不区分大小写的。 如果您的数据库覆盖此设置(通过使用替代归类),则需要指定在查询中使用的sorting规则。

 SELECT * FROM myTable WHERE myField = 'sOmeVal' COLLATE SQL_Latin1_General_CP1_CI_AS 

请注意,我提供的sorting规则仅仅是一个例子(尽pipe它可能对你来说很好)。 在这里可以find更全面的SQL Serversorting规则。

通常,string比较是不区分大小写的。 如果将数据库configuration为区分大小写的sorting规则,则需要强制使用不区分大小写的规则:

 SELECT balance FROM people WHERE email = 'billg@microsoft.com' COLLATE SQL_Latin1_General_CP1_CI_AS 

我在别处find了另一个解 就是要用

 upper(@yourString) 

但是这里的每个人都说,在SQL Server中,无论如何都是无视案件,这并不重要。 我很确定我们的数据库是区分大小写的。

不,只使用LIKE不起作用。 LIKEsearch与您的给定模式完全匹配的值。 在这种情况下, LIKE将只能find文本的“OmeVal”而不是“someval”。

一个实用的解决scheme是使用LCASE()函数。 LCASE('sOmeVal')获取文本的小写string:'someval'。 如果你在比较的两边都使用这个函数,它可以工作:

SELECT * FROM myTable WHERE LCASE(myField) LIKE LCASE('sOmeVal')

该语句比较两个小写string,以便您的'OmeVal'匹配'someval'(例如'Someval','someVAl'等)的所有其他符号。

你可以强制大小写,像这样强制转换成varbinary:

 SELECT * FROM myTable WHERE convert(varbinary, myField) = convert(varbinary, 'sOmeVal') 

你在哪个数据库上? 使用MS SQL Server,这是一个数据库范围的设置,或者您可以使用COLLATE关键字对每个查询进行覆盖。