“SELECT DISTINCT”忽略了不同的情况

时间:2010-04-15 11:38:22

标签: sql sql-server

我遇到的问题是,MSSQL Server 2000应该从表中选择一些不同的值(特定列是nvarchar类型)。 有时会有相同的值,但具有不同的情况,例如(伪代码):

SELECT DISTINCT * FROM ("A", "a", "b", "B")

将返回

A,b

但我确实想要(并期待)

A,a,b,B

因为它们实际上是不同的值。

如何解决这个问题?

4 个答案:

答案 0 :(得分:54)

排序规则将设置为不区分大小写。

你需要做这样的事情

Select distinct col1 COLLATE sql_latin1_general_cp1_cs_as
From dbo.myTable

答案 1 :(得分:7)

使用BINARY进行此操作。将列转换为二进制,如下所示:

SELECT DISTINCT BINARY(column1) from table1;

只需根据您的架构更改column1table1即可。

在MySQL 5.7中适用于我的完整示例应该适用于其他人:

SELECT DISTINCT BINARY(gateway) from transactions;

干杯!

答案 2 :(得分:2)

SELECT DISTINCT
   CasedTheColumn 
FROM
   (
   SELECT TheColumn COLLATE LATIN1_GENERAL_BIN AS CasedTheColumn
   FROM myTAble
   )FOO
WHERE
   CasedTheColumn IN ('A', 'a'...)

答案 3 :(得分:0)

尝试将相关列的collation设置为二进制,例如utf8-bin。您可以执行in the SELECT statement itself或直接更改表结构(这意味着每次运行查询时都不必映射排序规则,因为它将在内部正确存储它)。