我有一个问题,需要从一个表中选择一些不同的值(特定列为nvarchar类型)但是MSSQL Server 2000会出现相同但大小写不同的值,例如(伪代码):
SELECT DISTINCT * FROM ("A", "a", "b", "B")
将返回
A,b
但我确实希望(并期望)
A,a,b,B
因为它们实际上是不同的值。
如何解决这个问题?
我有一个问题,需要从一个表中选择一些不同的值(特定列为nvarchar类型)但是MSSQL Server 2000会出现相同但大小写不同的值,例如(伪代码):
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
_ai
= 不区分重音符号;
_as
= 区分重音符号;
_ci
= 不区分大小写;
_cs
= 区分大小写;
_bin
= 二进制。 - robotik不确定在MS SQL中是否适用,但在MySQL或PostgreSQL中,可以使用BINARY
来执行此操作。将该列强制转换为二进制,如下所示:
使用BINARY
函数,将列强制转换为二进制。
SELECT DISTINCT BINARY(column1) from table1;
根据您的模式,只需更改column1
和table1
。
在MySQL 5.7中适用的完整示例,应该也适用于其他版本:
SELECT DISTINCT BINARY(gateway) from transactions;
干杯!
SELECT DISTINCT column1 from table1
。或者如果您需要像这样转换一些内容,可以尝试使用SELECT DISTINCT name::text from clients;
。 - radtekSELECT DISTINCT
CasedTheColumn
FROM
(
SELECT TheColumn COLLATE LATIN1_GENERAL_BIN AS CasedTheColumn
FROM myTAble
)FOO
WHERE
CasedTheColumn IN ('A', 'a'...)
尝试将相关列的排序规则设置为二进制格式,例如utf8-bin。您可以通过两种方式实现:在SELECT
语句中直接进行设置或直接更改表结构(这意味着每次运行查询时都不必映射排序规则,因为它会正确存储在内部)。