2014-02-26 41 views
0

我想要一个可以搜索某个单词但仅以小写字母搜索的SQL查询。用于搜索小写字符串的SQL查询

我想

select * from employees where name like LOWER('%smith%')然而,这并没有带回任何结果。

但是,当我做 select * from employees where name like '%smith%'它返回雇员姓名SMITH和史密斯....在我的情况下,我只是希望它返回的地方雇员的名字是较低的。

在此先感谢!

+1

什么是dbms? – Jayvee

回答

2

你r默认排序规则可能设置为不区分大小写的选项。简单地说,这会导致所有的字符比较被执行,就好像比较的边是相同的情况一样,不管这是否为真。

你可以使用一个COLLATE语句WHERE子句中的列名如下:

select * from employees where name COLLATE Latin1_General_CS_AS like '%smith%' 

但是,如果你有一个区分大小写的比较显著需要时,你可能想改变你的数据库的默认排序规则正如您所看到的那样,明确标​​记排序非常冗长。

0

使用collationCOLLATE Latin1_General_CP1_CS_AS以明确区分大小写, 默认排序规则时安装SQL Server是SQL_Latin1_General_CP1_CI_AS

select * from employees where name COLLATE Latin1_General_CS_AS like '%smith%' 

CS:区分大小写
AS:区分重音

+0

这工作得很好。我希望他们给了这个功能一个合理的名字。 – user3356789

1

通常,为了以区分大小写的方式查询表,您需要指定具有区分大小写的排序规则的列(或整个数据库)。

出于性能原因,如果您将定期对此列执行区分大小写的查询,那么这将是首选方法。

但是,在捏合中,您可以即时指定查询归类。这是以更昂贵的查询计划为代价的,因此将其视为最后的手段。

例如:

SELECT * FROM Employees 
WHERE EmployeeName COLLATE SQL_Latin1_General_CP1_CS_AS 
LIKE '%smith%' 

有多种区分大小写的排序规则,所以你通常会希望选择一个最接近你使用的是标准不区分大小写的排序规则。

您可以检查通过运行这些语句,检查配置的归类:

--Server level 
SELECT SERVERPROPERTY('COLLATION') 

--Database level 
SELECT DATABASEPROPERTYEX('DatabaseName', 'Collation') 

--Column level 
USE DatabaseName 
GO 
SELECT name, collation_name 
FROM sys.columns 
WHERE OBJECT_ID IN (SELECT OBJECT_ID 
FROM sys.objects 
WHERE type = 'U' 
AND name = 'TableName') 
AND name = 'ColumnName' 

最有可能的,这些都将返回相同的值。例如,SQL_Latin1_General_CP1_CI_AS,在这种情况下,您将用于区分大小写的查询的排序规则为SQL_Latin1_General_CP1_CS_AS。

根据您得到的结果,您需要选择相关的区分大小写的排序规则from this list