--SQLSERVER中的排序规则 服务器-》数据库-》表列--参考:http://www.jb51.net/article/889.htm---------------------------------排序规则简介--------------------------------
--什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 2000 中,
--字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存
--储和比较字符所使用的规则。"
--  在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。
--
--    select * from ::fn_helpcollations()
--
--排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
--如:
--  Chinese_PRC_CS_AI_WS
--前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
--排序规则的后半部份即后缀 含义:
--  _BIN 二进制排序
--  _CI(CS) 是否区分大小写,CI不区分,CS区分
--  _AI(AS) 是否区分重音,AI不区分,AS区分   
--  _KI(KS) 是否区分假名类型,KI不区分,KS区分 
--_WI(WS) 是否区分宽度 WI不区分,WS区分 
--
--区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
--区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
--比较还将重音不同的字母视为不等。
--区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
--区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项
-------------------------------------------------------------------------------------sp_helpsort
SELECT SERVERPROPERTY ('Collation') --------------------------------------------
--2.更改服务器排序规则
--更改 SQL Server 2005 实例的默认排序规则的操作可能会比较复杂,包括以下步骤: --确保具有重新创建用户数据库及这些数据库中的所有对象所需的全部信息或脚本。
--使用工具(例如大容量复制)导出所有数据。
--删除所有用户数据库。
--重新生成在 setup 命令的 SQLCOLLATION 属性中指定新的排序规则的 master 数据库。例如:
--复制代码
start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI
--有关重新生成 master 数据库的详细信息,请参阅如何重新生成 SQL Server 2005 的 Master 数据库。
--创建所有数据库及这些数据库中的所有对象。
--导入所有数据。
--注意:
--可以为创建的每个新数据库指定默认排序规则,而不更改 SQL Server 2005 实例的默认排序规则。-----------------------------------------------------------------------------------
--3.设置和更改数据库排序规则
--创建新数据库时,可以使用下列内容之一指定排序规则:
--CREATE DATABASE 语句的 COLLATE 子句。
--SQL Server Management Studio.
--SQL 管理对象 (SMO) 中的 Database.Collation 属性。
--如果未指定排序规则,则使用服务器排序规则。
--可以使用 ALTER DATABASE 语句的 COLLATE 子句来更改在用户数据库中创建的任何新对象的排序规则。使用此语句不能更改任何现有用户定义的表中列的排序规则。使用 ALTER TABLE 的 COLLATE 子句可以更改这些列的排序规则。
--更改数据库排序规则时,需要更改下列内容:
--数据库的默认排序规则,这一新的默认排序规则将应用于数据库中后续创建的所有列、用户定义的数据类型、变量和参数。根据数据库中定义的对象解析 SQL 语句中指定的对象标识符时,也使用新的默认排序规则。
--将系统表中的任何 char、varchar、text、nchar、nvarchar 或 ntext 列更改为使用新的排序规则。
--将存储过程和用户定义函数的所有现有 char、varchar、text、nchar、nvarchar 或 ntext 参数和标量返回值更改为使用新的排序规则。
--将 char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型和基于这些系统数据类型的所有用户定义的数据类型更改为使用新的默认排序规则。 --SQL code :
--------------------------数据库----------------------------------------
--1.将数据库的字符集修改为:
ALTER DATABASE [pratice] COLLATE Chinese_PRC_CI_AS--2.为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GOALTER DATABASE db COLLATE Chinese_PRC_BIN
GOALTER   DATABASE [pratice]  COLLATE   Chinese_PRC_CS_AS  --区分大小写ALTER   DATABASE   [pratice] COLLATE  Chinese_PRC_CI_AS --不区分大小写
---------------------------表中的列---------------------------------------
--为表中的列指定排序规则
CREATE TABLE tb(col1 VARCHAR(10) ,col2 VARCHAR(10) COLLATE Chinese_PRC_CI_AS)
GOALTER TABLE tb ADD col3 VARCHAR(10) COLLATE Chinese_PRC_BIN
GOALTER TABLE tb ALTER COLUMN col2 VARCHAR(10) COLLATE Latin1_General_CS_AS_KS_WS
GOALTER   TABLE   tb  ALTER   COLUMN   colname   NVARCHAR(100)   COLLATE   Chinese_PRC_CI_AS  --不区分大小写ALTER   TABLE   tb  ALTER   COLUMN   colname   NVARCHAR(100)   COLLATE   Chinese_PRC_CS_AS  --区分大小写---------------------------------------------------------------------
--3. 为字符变量和参数应用排序规则
DECLARE @a VARCHAR(10) ,@b VARCHAR(10)
SELECT  @a = 'a' ,@b = 'A'--使用排序规则 Chinese_PRC_CI_AS
SELECT  CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' --Chinese_PRC_CI_AS不区分大小写ELSE '@a<>@b'END
--结果:@a=@b--使用排序规则 Chinese_PRC_BIN
SELECT  CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b'ELSE '@a<>@b'END
--结果:@a<>@b---------------------------SQL2000适用------------------------------------------------------
--方法一.安装SQL2000时选择区分大小写或安装完以后重建mastar,选择区分大小--C:\Program   Files\Microsoft   SQL   Server\80\Tools\Binn\rebuildm.exe--方法二.sql   server   8.0以上的版本才可以,7.0及其以下不支持
ALTER   DATABASE  [pratice]   COLLATE   Chinese_PRC_CS_AS--修改排序规则,改成大小写敏感的排序规则
--如果只修改一个表,用alter   table语句
--如果修改一个库的默认排序规则,用alter   datebase语句
--如果修改整个服务器的默认排序规则,用Rebuildm.exe重建master库
--指定排序规则就可以了-------------------------------------------------------------------
--注意需要使用NVARCHAR()数据类型!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--因为排序规则而出错的例子
--USE [tempdb]
--GO
--DROP TABLE #t1
--DROP TABLE #t2
CREATE TABLE #t1(value INT ,name NVARCHAR(20) COLLATE Albanian_CI_AI_WS) CREATE TABLE #t2(value INT ,name NVARCHAR(20) COLLATE Chinese_PRC_CI_AI_WS)INSERT  #t1SELECT  1 ,'中'UNION ALLSELECT  2 ,'国'UNION ALLSELECT  3 ,'人'UNION ALLSELECT  4 ,'阿' INSERT  #t2SELECT  1 ,'亲'UNION ALLSELECT  2 ,'国'UNION ALLSELECT  3 ,'好'UNION ALLSELECT  4 ,'阿' SELECT  * FROM    #t1 A INNER JOIN #t2 B ON A.name = B.name --解决方法
SELECT  * FROM    #t1 A INNER JOIN #t2 B ON A.name = B.name COLLATE Chinese_PRC_CI_AI_WS ---------------------------------------------------------------------------------------
--例1:让表NAME列的内容按拼音排序:
CREATE TABLE #t1(value INT ,name NVARCHAR(20) COLLATE Albanian_CI_AI_WS) INSERT  #t1SELECT  1 ,'中'UNION ALLSELECT  2 ,'国'UNION ALLSELECT  3 ,'人'UNION ALLSELECT  4 ,'阿' SELECT  * FROM    #t1 ORDER BY name COLLATE Chinese_PRC_CS_AS_KS_WS /*结果:
id name
----------- --------------------
4 阿
2 国
3 人
1 中
*/ -------------------------------------------------------------------------
--例2:让表NAME列的内容按姓氏笔划排序: create table #t(id int,name NVARCHAR(20)) insert #t select 1,'三'
union all select 2,'乙'
union all select 3,'二'
union all select 4,'一'
union all select 5,'十' select * from #t order by name collate Chinese_PRC_Stroke_CS_AS_KS_WS
drop table #t /*结果:
id name
----------- --------------------
4 一
2 乙
3 二
5 十
1 三
*/ ---------------------------计算汉字的笔划---------------------------------------------
--  上面所有准备过程,只是为了写下面这个函数,这个函数撇开上面建的所有临时表和固
--定表,为了通用和代码转移方便,把表tab_hzbh的内容写在语句内,然后计算用户输入一串
--汉字的总笔划:
USE [tempdb]
GO
create function fun_getbh(@str nvarchar(4000))
returns int
as
begin
declare @word nchar(1),@n int
set @n=0
while len(@str)>0
begin
set @word=left(@str,1)
--如果非汉字,笔划当0计
set @n=@n+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 id from (
select 1 as id,N'亅' as word
union all select 2,N'阝'
union all select 3,N'马'
union all select 4,N'风'
union all select 5,N'龙'
union all select 6,N'齐'
union all select 7,N'龟'
union all select 8,N'齿'
union all select 9,N'鸩'
union all select 10,N'龀'
union all select 11,N'龛'
union all select 12,N'龂'
union all select 13,N'龆'
union all select 14,N'龈'
union all select 15,N'龊'
union all select 16,N'龍'
union all select 17,N'龠'
union all select 18,N'龎'
union all select 19,N'龐'
union all select 20,N'龑'
union all select 21,N'龡'
union all select 22,N'龢'
union all select 23,N'龝'
union all select 24,N'齹'
union all select 25,N'龣'
union all select 26,N'龥'
union all select 27,N'齈'
union all select 28,N'龞'
union all select 29,N'麷'
union all select 30,N'鸞'
union all select 31,N'麣'
union all select 32,N'龖'
union all select 33,N'龗'
union all select 35,N'齾'
union all select 36,N'齉'
union all select 39,N'靐'
union all select 64,N'龘'
) T
where word>=@word collate Chinese_PRC_Stroke_CS_AS_KS_WS
order by id ASC) else 0 end)
set @str=right(@str,len(@str)-1)
end
return @n
ENDselect dbo.fun_getbh('中华'),dbo.fun_getbh('中華人民共和國')
--简繁体都行-------------------------------------------------------------------------
--用排序规则的特性得到汉字拼音首字母 --用得到笔划总数相同的方法,我们也可以写出求汉字拼音首字母的函数。如下:
USE [tempdb]
GO
create function fun_getPY(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @word nchar(1),@PY nvarchar(4000)
set @PY=''
while len(@str)>0
begin
set @word=left(@str,1)
--如果非汉字字符,返回原字符
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 PY from (
select 'A' as PY,N'驁' as word
union all select 'B',N'簿'
union all select 'C',N'錯'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鰒'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'漚'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'籜'
union all select 'W',N'鶩'
union all select 'X',N'鑂'
union all select 'Y',N'韻'
union all select 'Z',N'咗'
) T
where word>=@word collate Chinese_PRC_CS_AS_KS_WS
order by PY ASC) else @word end)
set @str=right(@str,len(@str)-1)
end
return @PY
end select dbo.fun_getPY('中华'),dbo.fun_getPY('中華人民共和國')
--结果都为:ZHRMGHG -------------------------------------------------------------------------
--先用SQLSERVER方法得到所有汉字,不用字典,我们简单利用SQL语句就可以得到:
select top 20902 code=identity(int,19968,1) into #t from syscolumns a,syscolumns b select code,nchar(code) as CNWord from #t --然后,我们用Select语句,让它按笔划排序。 select code,nchar(code) as CNWord
from #t
order by nchar(code) collate Chinese_PRC_Stroke_CS_AS_KS_WS,code 

SQL Server排序规则相关推荐

  1. Sql Server排序规则的简介、选择、应用

    用SQL语句查询当前数据库的默认排序规则 use db_name  exec sp_helpsort  go --以下转自:http://hi.baidu.com/jztchina/blog/item ...

  2. SQL Server 排序规则(摘)

    3Sql Server数据库,在跨库多表连接查询时,若两数据库默认字符集不同,系统就会返回这样的错误:"无法解决equal to操作的排序规则冲突" 一.错误分析: 这个错误是因为 ...

  3. SQL sever 排序规则介绍

    一.SQL Server 排序规则后缀含义 _BIN 指定使用向后兼容的二进制排序顺序. _BIN2 指定使用 SQL Server 2005 中引入的码位比较语义的二进制排序顺序. _Stroke ...

  4. SQL自定义排序规则

    SQL自定义排序规则 原数据 结果顺序数据显示 Apply:提交请求 Review:等待回复 Finish:任务完成 按日期和状态排序,先状态为:提交请求(Apply)-按时间倒序,然后状态为:等待回 ...

  5. mysql数据库表更改排序_修改SQL数据库排序规则修改表栏位排序规则

    修改SQL数据库排序规则修改表栏位排序规则 修改SQL数据库排序规则: 1.修改为单用户模式 2.然后关闭所有的查询窗口,修改Options的Collocation属性,如:Chinese_PRC_9 ...

  6. 修改sql服务器排序规则,SQL SERVER数据库服务器排序规则修改

    SQL Server服务器修改排序规则的方法 操作及验证步骤: 1 登录数据库后,查看当前安装数据库默认排序规则的两种方式 方式一.使用SQL Server 2014 Management Studi ...

  7. sql server排序慢_SQL 查询调优之 where 条件排序字段以及 limit 使用索引的奥秘

    (给数据分析与开发加星标,提升数据技能) 作者:风过无痕-唐 www.cnblogs.com/tangyanbo/p/6378741.html 奇怪的慢sql 我们先来看2条sql 第一条: sele ...

  8. mysql的组内排序生成序号_sql 分组查询,组内排序, 组内添加序号 (SQL Server 排序函数 ROW_NUMBER和RANK 用法总结)...

    下面的例子和SQL语句均在SQL Server 2008环境下运行通过,使用SQL Server自带的AdventureWorks数据库. -- 添加序列号 -- 行号用法: ROW_NUMBER() ...

  9. SQL Server 排序函数 ROW_NUMBER和RANK 用法总结

    下面的例子和SQL语句均在SQL Server 2008环境下运行通过,使用SQL Server自带的AdventureWorks数据库. 转载请注明此文原创自 CSDN TJVictor的专栏:ht ...

  10. SQL Server 数据完整性规则

    表的概念 表由记录组成,记录由字段组成,字段由字符或者数字组成.表:统一管理的相关数据的集合. 数据模型及数据库 经典数据类型:网状.层次.关系.SQL Server属于关系型数据模型. SQL特点: ...

最新文章

  1. 吴恩达的Landing.ai又迎来一位AI大牛
  2. Java Spring Boot VS .NetCore (七) 配置文件
  3. 神经网络-全连接层(1)
  4. java 递归20210408-3
  5. sqlmap的简单用法
  6. NOIP2018 No regrets youth
  7. 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
  8. 安装MATLAB R2012B遇到问题(需要继续安装以下一个或多个产品: MATLAB 8.0 (不可用) 您必须选择已至少安装这些),已决解!...
  9. python读音有道-Python版有道翻译
  10. 微信小程序开发教程第五章:微信小程序名片夹详情页开发
  11. 毕设题目:Matlab车辆计数
  12. 省级-上市公司数字经济数据(2013-2020年)
  13. 《哪吒》爆红的背后:你是选择妥协还是逆天改命?
  14. html标签-meta
  15. 二连杆纯连杆动力学建模——LangrageEquation with Matlab
  16. C语言猜数游戏两位数
  17. 亲历5.12汶川大地震----杨大伟作为志愿者14日奔赴汶川等地抗震救灾
  18. 【Linux】环境变量和命令行参数
  19. 公众号开发--模板消息推送中文乱码问题
  20. 第六十二周总结——天降大任于斯人也

热门文章

  1. Photoshop软件介绍
  2. 分享5款可以录屏的软件,录屏幕视频软件,亲测好用
  3. 无法在linux下启用ttysac0串口 终端只打印信息,启动出现mmc0: error -110 whilst initialising SD card该如何解决?...
  4. 20分钟学会TCGA数据处理的视频链接
  5. 什么是技术债,为什么要还技术债?
  6. VS2010 中修改项目名称
  7. 【JAVA今法修真】 第四章 redis特性 击穿雪崩
  8. android 禁止第三方相机,谷歌突然宣布,Android 11推出新规,第三方相机软件猝不及防...
  9. python哪个机构教的好_学Python去哪家机构比较好?老男孩教育怎么样?
  10. java 京东秒杀系统_京东秒杀浪费坑位惩罚你可知道?