200分求助!关于中文笔画排序问题。

简单说明: name
张文 (共11画)
刘慧 (共16画)
我昏 (共15画)
要求排序后得到 name
刘慧 (16)
我昏 (15)
张文 (11)
目前我只会用excel里的排序,可以按照第一个中文笔画排序,但是无法对整个名字进行笔画计算并排序,敢问高手用sql语句如何实现?

---------------------------------------------------------------

转贴:
CREATE TABLE [t4] (
[a] [char] (10) COLLATE Chinese_PRC_Stroke_ci_as
) ON [PRIMARY]
GO
insert into t4 values('三')
insert into t4 values('一')
insert into t4 values('二')
insert into t4 values('十')
insert into t4 values('乙')
select * from t4 order by a
a
----------




您甚至可以使用 ALTER DATABASE 语句来更改现有数据库的排序规则(当使用 SQL Server 企业管理器时,该语句不可用)。例如,以下语句将 Products 数据库的排序规则从 Czech_CS_AS 更改为 Czech_CI_AI (将区分大小写和重音更改为不区分大小写和重音):

ALTER DATABASE Products
COLLATE Czech_CI_AI
----------------------------
你改为倒排就ok了!
---------------------------------------------------------------

select * from tablename
ORDER BY name COLLATE Chinese_PRC_Stroke_CI_AS_KS
---------------------------------------------------------------

create function f_ch2bh(@chn nchar(1))
returns int
as
begin
declare @n int
declare @c int
set @n =0

select @n = @n +1,
@c = case chn when @chn then @n else @c end
from(
select top 30 * from (
select chn =
--'一'union all select -- 1
'丁'union all select --2
'万'union all select --3
'不'union all select --4
'且'union all select --5
'丢'union all select --6
'丣'union all select --7
'並'union all select --8
'临'union all select --9
'丵'union all select --0
'祟'union all select --11
'亴'union all select --12
'亂'union all select --13
'僎'union all select --14
'僵'union all select --15
'亸' union all select --16
'償' union all select --17
'儭' union all select --18
'儳' union all select --19
'儶'union all select -- 20
'儷' union all select --21
'亹' union all select -- 22
'儽'union all select --
'儾'union all select --
'囔'union all select --
'圞'union all select --
'灥'union all select --
'囖'union all select --
'灩'union all select --
'灪'union all select @chn) as a
order by chn COLLATE Chinese_PRC_Stroke_ci_as
) as b
return(@c)
end
go

create function f_st2bh(@st nvarchar(4000))
returns int --总笔数,字母和数字按一笔算。
as
begin
declare @bh int
declare @n int

set @n = 1
set @bh = 0

while @n <= len(@st)
begin
set @bh = @bh + dbo.f_ch2bh(substring(@st,@n,1))
set @n = @n + 1
end

return(@bh)
end

go

select dbo.f_st2bh('工一') --4
select dbo.f_st2bh('圣诞快乐') --25
select dbo.f_st2bh('请大家帮我再测一下') --59

select * from table order by dbo.f_st2bh

---------------------------------------------------------------

我的资料中没有按照拼音和笔划排序一说
不知道微软对中文是怎么定义这些排序规则的

上每一种排序规则都带有一系列后缀,以便定义是否区分大小写、重音、宽度或假名。下表显示了可能存在的确切后缀。上表列出的 40 种语言中每一种都支持下表中的 17 种后缀,共计 680 种的 Windows 排序规则。

排序规则的后缀 含义
_BIN 二进制排序
_CI_AI 不区分大小写、不区分重音、不区分假名类型、不区分宽度
_CI_AI_WS 不区分大小写、不区分重音、不区分假名类型、区分宽度
_CI_AI_KS 不区分大小写、不区分重音、区分假名类型、不区分宽度
_CI_AI_KS_WS 不区分大小写、不区分重音、区分假名类型、区分宽度
_CI_AS 不区分大小写、区分重音、不区分假名类型、不区分宽度
_CI_AS_WS 不区分大小写、区分重音、 不区分假名类型、区分宽度
_CI_AS_KS 不区分大小写、区分重音、区分假名类型、不区分宽度
_CI_AS_KS_WS 不区分大小写、区分重音、区分假名类型、区分宽度
_CS_AI 区分大小写、不区分重音、 不区分假名类型、不区分宽度
_CS_AI_WS 区分大小写、不区分重音、不区分假名类型、区分宽度
_CS_AI_KS 区分大小写、不区分重音、区分假名类型、不区分宽度
_CS_AI_KS_WS 区分大小写、不区分重音、区分假名类型、区分宽度
_CS_AS 区分大小写、区分重音、不区分假名类型、不区分宽度
_CS_AS_WS 区分大小写、区分重音、不区分假名类型、区分宽度
_CS_AS_KS 区分大小写、区分重音、区分假名类型、不区分宽度
_CS_AS_KS_WS 区分大小写、区分重音、区分假名类型、区分宽度

这些语言的名称是随意的。选择这些名称是为了正确地表示非 Unicode 数据的每一个唯一受支持的代码页,并表示所有数据的排序顺序。在许多情况下(某种语言可以在另一代码页上完全显示,或者某种语言所需的排序顺序可以被其他排序顺序替换),该语言会因其可以被充分替换而从该列表中“删除”。请注意,是否区分假名和宽度的默认设置是不区分假名和宽度。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus