2013-11-20 64 views
0

我想查詢一個大寫的sql服務器表,它不會返回任何內容。 例如,sql server查詢大寫字母的值

表結構,

ID Fruit 
-- ------ 
1 APPLE ONE 
2 ORANGE TWO 
3 PEAR THREE 

Select * from Fruits where fruit = 'APPLE ONE' 

不返回任何東西。但是,如果我把它改爲「蘋果一號」的數據庫和查詢更改爲

Select * from Fruits where fruit = 'apple one' 

它的工作原理。

你如何用大寫數據獲得這項工作?

+1

你確定沒有一些額外的空間嗎? –

+3

我不太相信你的查詢,因爲SQL不使用雙引號。 – Hogan

+2

你使用的是什麼排序規則? – BlackICE

回答

1

您可以使用UPPER或LOWER功能。像這樣:

Select * from Fruits where UPPER(fruit) = 'APPLE ONE' 

也像op。會忽略大小寫:

Select * from Fruits where fruit like 'APPLE ONE' 
+0

不要忘記索引我的朋友... –

+3

@ Dd2 - 你真的認爲有人有這個問題已經添加到列的索引? – Hogan

+0

我想知道OP是否有3個梨,或者他是用英文名連接他的ID。 – SQLMason

-1

在這種情況下,最好的東西是平等oeprator兩側轉換爲大寫或小寫

Select * from Fruits where UPPER(fruit) = UPPER('apple one') 

Select * from Fruits where LOWER(fruit) = LOWER(apple one') 
+0

感謝您讓我知道爲什麼反對 – Santhosh

4

確保您的列設置爲正確的排序規則。或者你可以直接在查詢中指定排序規則。

與CI的歸類不區分大小寫。這將返回你的「蘋果一個」記錄:

select 'CI', * from table1 
where myfield = 'apple one' collate SQL_Latin1_General_CP1_CI_AS 

這將不回你的「蘋果一個」記錄,因爲它是CS(區分大小寫):

select 'CS', * from table1 
where myfield = 'apple one' collate SQL_Latin1_General_CP1_CS_AS 

如果您的查詢使用相同的此列的排序規則,最好將其設置在列上。如果所有查詢在所有列上使用相同的排序規則,最好將其設置爲數據庫本身的默認值。

例如,設置爲列:

CREATE TABLE Table1 
    ([myfield] varchar(10) collate SQL_Latin1_General_CP1_CI_AS) 
; 
+0

如果數據爲「APPLE ONE」且WHERE子句正在尋找「APPLE ONE」,那麼在每個排序規則(包括二進制和區分大小寫)應該返回。 –