我们今天是要和大家一起讨论的是SQL Server数据库中正确使用DIstINCT的大小写问题,在实际操作中SQL Server为你提供了在你的数据库中存储混合的大小写数据的实际操作能力,但是根据你怎样创建数据库,SQL Server将在你给出T-SQL命令时忽视大小写。
你可能面对的一个问题是你想从一个表获得只包含不同值的列表,来显示你的表中不
SQL Server为你提供了在你的数据库中存储混合大小写数据的能力,但是根据你怎样创建数据库,SQL Server数据库将在你给出T-SQL命令时忽视大小写。你可能面对的一个问题是你想从一个表获得只包含不同值的列表,来显示你的表中不同,但是假如你的数据库是按照不区分大小写来建立的,那么SQL Server数据库中使用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
假如你更新一条记录并将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”作为不同的值来显示。
下一步我们将要做的是在一个不区分大小写的数据库中创建一个新表然后从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”结合起来,因为不区分大小写。
为了解决这个问题我们可以将这个查询按照下面的方式修改使得这个收集在FirstName字段上区分大小写。
SELECT DISTINCT TOP 10 FirstName COLLATE sql_latin1_general_cp1_cs_as FROM Test.dbo.contact WHERE FirstName LIKE 'A%' ORDER BY 1
当这个运行时,我们看到了值“Adam”和“ADAM”。
所以根据你的数据库是怎样建立的,你将能够或不能看到这个不同。
为了给你显示另一个例子,下面是一个快速选择区分大小写或不区分大小写选项的 *** 。
我们运行的之一个查询是SQL Server数据库中使用区分大小写,所以四条记录都将显示出来。
select distinct (item) COLLATE sql_latin1_general_cp1_cs_as FROM ( select 'abcd' item union all select 'ABCD' union all select 'defg' union all select 'deFg') items
第二个查询中不同的是收集的名称。当这个查询使用不区分大小写时,我们只获得两条记录。
select distinct (item) COLLATE sql_latin1_general_cp1_ci_ai FROM ( select 'abcd' item union all select 'ABCD' union all select 'defg' union all select 'deFg') items
以上的相关内容就是对SQL Server数据库中使用DISTINCT的大小写问题的介绍,望你能有所收获。
正在启动windows时间长怎么办 小编带来了Windows 7/8.1正在启动windows时间长解决方法,假如有朋友在安装完Windows系统之后一直停留在“正在启动windows”的话,不妨试一试下文的方法哦~ 原因:Windows 7/8.1不完全支持UEFI,需要CSM(Comp...
我一个朋友最近装装了Windows 7,他总感觉有人用了他的电脑,但是一直不确定,他想知道有没有人动用他的电脑,问我有没有办法 我说设置一下就行了: 启动Windows 7,在搜索栏中输入编辑组,马上就搜索到了编辑组策略,点击即可启动程序编辑组策略。依次展开组策略左侧树形列表的计算机配置/管理模...
用Windows 7久了,C盘越来越大,原来50G的空间基本用完了,又不想重装系统,就想着能不能直接扩容。 在网上搜了半天,看了无数教程,都写得不明不白的,结合了几篇教程才终于搞明白。 重新总结一下,方便有需要的人。 所用软件: http://www.jb51.net/softs/57895...
Windows 7/8系统: 控制面板——自动播放——取消掉为所有媒体和设备设置自动播放 winXP系统: 开始—运行—gpedit.msc—计算机配置—管理模板—系统—关闭自动播放—已启用—所有驱动器—确定 关闭自动运行功能说明: 一旦您将媒体插入驱动器...
很多朋友从XP升级迈入了Windows 7的殿堂,却发现,Windows 7确实好用和华丽,可是有一些地方不太适应。今天举出一则例子,是把Windows 7系统下的宋体替换为XP系统下的字体。这个并非无聊,大家去网上搜索下,就知道有多少人想要这么做了。 没办法,每人的需求总是那么的不同,好吧,怀旧...
每一位用户的Windows 7系统上,或多或少都会有一到两个自己常用的文件夹,那么如何将这些常用的文件夹添加到任务栏上,增加我们的工作效率呢 许多用户只知道移动exe程序文件到任务栏,却不知道文件夹怎么移,下面小编通过图文教程来告诉大家方法。 操作方法: 1、首先将你使用频率最高的那个文件夹重命...