我遇到的问题是,MSSQL Server 2000应该从表中选择一些不同的值(特定列是nvarchar类型)。 有时会有相同的值,但具有不同的情况,例如(伪代码):
SELECT DISTINCT * FROM ("A", "a", "b", "B")
将返回
A,b
但我确实想要(并期待)
A,a,b,B
因为它们实际上是不同的值。
如何解决这个问题?
答案 0 :(得分:54)
排序规则将设置为不区分大小写。
你需要做这样的事情
Select distinct col1 COLLATE sql_latin1_general_cp1_cs_as
From dbo.myTable
答案 1 :(得分:7)
使用BINARY进行此操作。将列转换为二进制,如下所示:
SELECT DISTINCT BINARY(column1) from table1;
只需根据您的架构更改column1
和table1
即可。
在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或直接更改表结构(这意味着每次运行查询时都不必映射排序规则,因为它将在内部正确存储它)。