加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在区分大小写的SQL Server中使用DISTINCT问题

发布时间:2016-09-09 20:28:49 所属栏目:MsSql教程 来源:站长网
导读:问题 SQL Server为你提供了在你的数据库中存储混合大小写数据的能力,但是根据你怎样创建数据库,SQL Server将在你给出T-SQL命令时忽视大小写。你可能面对的一
问题

SQL Server为你提供了在你的数据库中存储混合大小写数据的能力,但是根据你怎样创建数据库,SQL Server将在你给出T-SQL命令时忽视大小写。你可能面对的一个问题是你想从一个表获得只包含不同值的列表,来显示你的表中不同,但是如果你的数据库是按照不区分大小写来建立的,那么DISTINCT条件语句不会显示这些不同,它只会将所有的值放在一起。所以在这方面有什么选择吗?

专家解答

为了说明这个动作,我们将使用一个区分大小写和一个不区分大小写的数据库来看看它工作的两种方式。

第一组查询使用了AdventureWorks数据库,它被配置为区分大小写。为了得到从你的数据库而来的集合,你可以运行这个查询:

SELECT name, collation_name
FROM master.sys.databases

我们将查询AdventureWorks数据库中的Preson.Contact的数据。所有的数据都是作为混合大小写来建立的,所以当我们运行这个查询的时候我们没有得到重复的值。

SELECT DISTINCT TOP 10 FirstName
FROM Person.Contact
WHERE FirstName LIKE 'A%'
ORDER BY 1

在区分大小写的SQL Server中使用DISTINCT问题

如果你更新一条记录并将FirstName从“Adam”改为“ADAM”,那么当运行这个查询时我们会获得两个不同的值。

UPDATE Person.Contact
SET FirstName = 'ADAM'
WHERE ContactID = 62
GO
SELECT DISTINCT TOP 10 FirstName
FROM Person.Contact
WHERE FirstName LIKE 'A%'
ORDER BY 1

正如你看到的,现在“Adam”和“ADAM”作为不同的值来显示。

在区分大小写的SQL Server中使用DISTINCT问题

下一步我们将要做的是在一个不区分大小写的数据库中创建一个新表然后从Person.Contact加载所有的数据到这个新表中。

CREATE TABLE Test.dbo.contact (FirstName nvarchar(50))
GO
INSERT INTO Test.dbo.contact
SELECT FirstName FROM Person.Contact
GO
SELECT DISTINCT TOP 10 FirstName
FROM Test.dbo.contact
WHERE FirstName LIKE 'A%'
ORDER BY 1
GO

当我们运行SELECT查询时你可以看到输出将“Adam”和“ADAM”结合起来,因为不区分大小写。

在区分大小写的SQL Server中使用DISTINCT问题

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读