2014-02-26 72 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