我遇到问题,MSSQL Server 2000应该从表中选择一些不同的值(具体列是nvarchar类型)。 有有时相同的值,但不同的情况下,例如(伪):“SELECT DISTINCT”忽略不同情况
SELECT DISTINCT * FROM ("A", "a", "b", "B")
将返回
A,b
但我想(并期望)
A,a,b,B
,因为它们实际上是不同的值。
如何解决这个问题?
我遇到问题,MSSQL Server 2000应该从表中选择一些不同的值(具体列是nvarchar类型)。 有有时相同的值,但不同的情况下,例如(伪):“SELECT DISTINCT”忽略不同情况
SELECT DISTINCT * FROM ("A", "a", "b", "B")
将返回
A,b
但我想(并期望)
A,a,b,B
,因为它们实际上是不同的值。
如何解决这个问题?
排序规则将设置为不区分大小写。
你需要做这样的事情
Select distinct col1 COLLATE sql_latin1_general_cp1_cs_as
From dbo.myTable
我不知道COLLATE,但那是解决方案。 只要我被允许(6分钟左右),我会接受这个。 谢谢! – powerbar 2010-04-15 11:46:35
不要忘记添加'作为col1',以避免结果丢失列名! – MKorsch 2014-07-03 11:42:28
'latin1_general_ci'适用于大多数拉丁字符,但是'utf8mb4_unicode_ci',如['show collation'](https://dev.mysql.com/doc/refman/5.7/en/show-collation.html)所示为一切工作。 – 2017-10-11 08:20:02
SELECT DISTINCT
CasedTheColumn
FROM
(
SELECT TheColumn COLLATE LATIN1_GENERAL_BIN AS CasedTheColumn
FROM myTAble
)FOO
WHERE
CasedTheColumn IN ('A', 'a'...)
放入链接不是答案。解释如何使用那里的信息以及它与问题的关系如何。 – 2016-09-20 07:49:10
尝试在问题设置列的collation的东西二进制,例如utf8-bin。你可以做到这一点in the SELECT
statement itself或直接改变你的表结构(这意味着它不必每次运行查询时都会映射排序规则,因为它会在内部正确地存储它)。
对此操作使用BINARY。转换列,以二进制像这样:
SELECT DISTINCT BINARY(column1) from table1;
只要改变column1
和table1
按您的架构。
是在MySQL 5.7为我的作品完整的示例,应该为别人工作:
SELECT DISTINCT BINARY(gateway) from transactions;
干杯!
更清洁的选择! – brianlmerritt 2016-07-29 08:25:54
这太好了。我不想改变每个表格的排序规则,我必须像这样进行搜索。 – carla 2017-06-26 14:22:09
您对列使用什么排序规则? – 2010-04-15 11:40:38