SQL区分大小写的字符串比较

时间:2010-10-19 13:52:58

标签: sql sql-server

如何比较字符串,以便只有在每个字符串的大小写相同时才进行比较。例如:

Select * from a_table where attribute = 'k'

...将返回属性为“K”的行。我不想要这种行为。

7 个答案:

答案 0 :(得分:329)

Select * from a_table where attribute = 'k' COLLATE Latin1_General_CS_AS 

诀窍。

答案 1 :(得分:38)

您还可以使用以下语法将该属性转换为区分大小写

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CS_AS

现在,您的搜索将区分大小写

如果您想再次使该列不区分大小写,请使用

ALTER TABLE Table1
ALTER COLUMN Column1 VARCHAR(200)
COLLATE SQL_Latin1_General_CP1_CI_AS

答案 2 :(得分:23)

您可以轻松地将列转换为VARBINARY(最大长度),长度必须是您希望避免缺陷比较的最大长度,足以将长度设置为列长度。修剪列可以帮助您比较实际值,除了空间有意义并在表格列中有价值,这是一个简单的示例,您可以看到我修剪列值然后转换和比较。:

CONVERT(VARBINARY(250),LTRIM(RTRIM(Column1))) = CONVERT(VARBINARY(250),LTRIM(RTRIM(Column2)))

希望得到这个帮助。

答案 3 :(得分:15)

正如另一种选择,您可以使用HASHBYTES,如下所示:

SELECT * 
FROM a_table 
WHERE HASHBYTES('sha1', attribute) = HASHBYTES('sha1', 'k')

答案 4 :(得分:5)

简化一般答案

<块引用>

SQL 区分大小写的字符串比较

这些示例可能会有所帮助:

ITER_CONCEPT(I)

转换可能比哈希字节的运行时计算更有效,我希望整理可能更快。

答案 5 :(得分:4)

您可以将attribute定义为BINARY或使用INSTRSTRCMP来执行搜索。

答案 6 :(得分:-5)

如果你使用oracle sql navigator,你可以使用;

Select * from a_table where attribute = UPPER('k')

如果您想返回属性为&#39; K&#39;并且&#39; k&#39;。 你可以使用;

Select * from a_table where UPPER(attribute) = UPPER('k')