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
不起作用。 LIKE
search与您的给定模式完全匹配的值。 在这种情况下, 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关键字对每个查询进行覆盖。