数据库汉字排序规则__按笔画排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sqlserver:整理一下SQLSERVER的排序规则疯狂代码 / ĵ:http://DataBase/Article68892.html
SQL SERVER排序规则平时使用不是很多也许不少初学者还比较陌生但有
个大家应是经常碰到: SQL SERVER数据库在跨库多表连接查询时若两数据
库默认集区别系统就会返回这样:
“无法解决 equal to 操作排序规则冲突”
.分析:
这个是排序规则不致造成我们做个测试比如:
create table #t1(
name varchar(20) collate Albanian_CI_AI_WS,
value )
create table #t2(
name varchar(20) collate Chinese_PRC_CI_AI_WS,
value )
表建好后执行连接查询:
select * from #t1 A inner join #t2 B _disibledevent=>这样就出现了:
服务器: 消息 446级别 16状态 9行 1
无法解决 equal to 操作排序规则冲突
要排除这个最简单思路方法是表连接时指定它排序规则这样就
不再出现了语句这样写:
select *
from #t1 A inner join #t2 B
on = collate Chinese_PRC_CI_AI_WS
2.排序规则介绍:
什么叫排序规则呢?MS是这样描述:"在 Microsoft SQL Server 2000 中
串物理存储由排序规则控制排序规则指定表示每个位模式以及存
储和比较所使用规则"
在查询分析器内执行下面语句可以得到SQL SERVER支持所有排序规则
select * from ::fn_helpcollations
排序规则名称由两部份构成前半部份是指本排序规则所支持集
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE集Chinese_PRC_指针对大陆简体字UNICODE排序规则
排序规则后半部份即后缀 含义:
_BIN 2进制排序
_CI(CS) 是否区分大小写CI不区分CS区分
_AI(AS) 是否区分重音AI不区分AS区分
_KI(KS) 是否区分假名类型,KI不区分KS区分
_WI(WS) 是否区分宽度 WI不区分WS区分
区分大小写:如果想让比较将大写字母和小写字母视为不等请选择该选项
区分重音:如果想让比较将重音和非重音字母视为不等请选择该选项如果选择该选项
比较还将重音区别字母视为不等
区分假名:如果想让比较将片假名和平假名日语音节视为不等请选择该选项
区分宽度:如果想让比较将半角和全角视为不等请选择该选项
3.排序规则应用:
SQL SERVER提供了大量WINDOWS和SQLSERVER专用排序规则但它应用往往
被开发人员所忽略其实它在实战中大有用处
例1:让表NAME列内容按拼音排序:
create table #t(id ,name varchar(20))
insert #t select 1,'中'
union all select 2,'国'
union all select 3,'人'
union all select 4,'阿'
select * from #t order by name collate Chinese_PRC_CS_AS_KS_WS
drop table #t
/*结果:
id name
----------- --------------------
4 阿
2 国
3 人
1 中
*/
例2:让表NAME列内容按姓氏笔划排序:
create table #t(id ,name varchar(20))
insert #t select 1,' 3'
union all select 2,'乙'
union all select 3,' 2'
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 2
5 十
1 3
*/
4.在实战中排序规则应用扩展
SQL SERVER汉字排序规则可以按拼音、笔划等排序那么我们如何利用这种功能
来处理汉字些难题呢?我现在举个例子:
用排序规则特性计算汉字笔划
要计算汉字笔划我们得先做准备工作我们知道WINDOWS多国汉字UNICODE目前
收录汉字共20902个简体GBK码汉字UNICODE值从19968开始
首先我们先用SQLSERVER思路方法得到所有汉字不用字典我们简单利用SQL语句就
可以得到:
select top 20902 code=identity(,19968,1) o #t from syscolumns a,syscolumns b 再用以下语句我们就得到所有汉字它是按UNICODE值排序:
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
结果:
code CNWord
----------- ------
19968
20008 丨
20022 丶
20031 丿
20032 乀
20033 乁
20057 乙
20058 乚
20059 乛