关于sql:“SELECT DISTINCT”忽略了不同的情况

“SELECT DISTINCT” ignores different cases

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

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

会回来的

1
A,b

但我确实想要(也确实期待)

1
A,a,b,B

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

如何解决这个问题?


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

你需要这样做

1
2
SELECT DISTINCT col1 COLLATE sql_latin1_general_cp1_cs_as
FROM dbo.myTable


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

1
SELECT DISTINCT BINARY(column1) FROM table1;

只需根据您的模式更改column1table1

我在MySQL5.7中使用的完整示例应该适用于其他人:

1
SELECT DISTINCT BINARY(gateway) FROM transactions;

干杯!


1
2
3
4
5
6
7
8
9
SELECT DISTINCT
   CasedTheColumn
FROM
   (
   SELECT TheColumn COLLATE LATIN1_GENERAL_BIN AS CasedTheColumn
   FROM myTAble
   )FOO
WHERE
   CasedTheColumn IN ('A', 'a'...)


尝试将相关列的排序规则设置为二进制,例如utf8 bin。您可以在SELECT语句本身中这样做,也可以直接更改表结构(这意味着它不必在每次运行查询时映射排序规则,因为它将正确地存储在内部)。