2013-11-20 60 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”,那么在每个排序规则(包括二进制和区分大小写)应该返回。 –