【澳门金沙vip】SQL Server 排序规则(摘)

复制代码 代码如下:CREATE function
fGetPy(@str varchar(500)=”) returns varchar(500) as begin declare
@strlen int,@return varchar(500),@ii int declare @c nchar(1),@chn
nchar(1) select @strlen=len(@str),@return=”,@ii=0 set @ii=0 while
@ii@strlen begin select @ii=@ii+1,@chn=substring(@str,@ii,1) if
@chn=’吖’ select @c = char(count(*)+63) from ( select top 27 * from (
select chn = ‘吖’ union all select ‘八’ union all select ‘嚓’ union all
select ‘咑’ union all select ‘妸’ union all select ‘发’ union all select
‘旮’ union all select ‘铪’ union all select ‘丌’ –because have no ‘i’
union all select ‘丌’ union all select ‘咔’ union all select ‘垃’ union
all select ‘嘸’ union all select ‘拏’ union all select ‘噢’ union all
select ‘妑’ union all select ‘七’ union all select ‘呥’ union all select
‘仨’ union all select ‘他’ union all select ‘屲’ –no ‘u’ union all
select ‘屲’ –no ‘v’ union all select ‘屲’ union all select ‘夕’ union
all select ‘丫’ union all select ‘帀’ union all select @chn ) as a order
by chn COLLATE Chinese_PRC_CI_AS ) as b where b.chn =@chn else set
@c=@chn set @return=@return+@c end return(@return) end

if exists (select * from sysobjects where id = object_id(N'[fn_ChineseToSpell]’) and xtype in (N’FN’, N’IF’, N’TF’))
    drop function [fn_ChineseToSpell]
GO
/*创建取拼音首字母函数*/ 
create function [dbo].[fn_ChineseToSpell](@strChinese varchar(500)=”) 
returns varchar(500) 
as 
begin /*函数实现开始*/ 
    declare @strLen int,@return varchar(500),@i int 
    declare @n int,@c char(1),@chn nchar(1)  
    select @strLen=len(@strChinese),@return=”,@i=0 
    while @i<@strLen 
    begin /*while循环开始*/
            select @i=@i+1,@n=63,@chn=substring(@strChinese,@i,1) 
            if @chn>’z’/*原理:“字符串排序以及ASCII码表”*/ select @n = @n +1,@c =case chn when @chn then char(@n) else @c end from(select top 27 * from (select chn = ‘吖’ union all select ‘八’ union all select ‘嚓’ union all select ‘咑’ union all select ‘妸’  union all select ‘发’  union all select ‘旮’  union all select ‘铪’  union all select ‘丌’ /*because have no ‘i’*/ union all select ‘丌’ union all select ‘咔’ union all select ‘垃’ union all select ‘嘸’ union all select ‘拏’ union all select ‘噢’ union all select ‘妑’ union all select ‘七’ union all select ‘呥’ union all select ‘仨’ union all select ‘他’ union all select ‘屲’ /*no ‘u’*/ union all select ‘屲’ /*no ‘v’*/ union all select ‘屲’ union all select ‘夕’ union all select ‘丫’ union all select ‘帀’ union all select @chn) as a  order by chn COLLATE Chinese_PRC_CI_AS ) as b               else
                set @c=@chn
            set @return=@return+@c  
    end /*while循环结束*/  
    return(@return)  
end /*函数实现结束*/
使用方式:
select dbo.[fn_ChineseToSpell](‘魏保光’)

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

一、错误分析:
这个错误是因为排序规则不一致造成的,比如:
create table #t1(
name varchar(20) collate Albanian_CI_AI_WS,  
value int)
create table #t2(
name varchar(20) collate Chinese_PRC_CI_AI_WS,    
value int)
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  

二、排序规则简介:
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区分
区分大小写:是否想让比较将大写字母和小写字母视为不等
区分重音:是否想让比较将重音和非重音字母视为不等
区分假名:是否想让比较将片假名和平假名日语音节视为不等
区分宽度:是否想让比较将半角字符和全角字符视为不等