求简单助记码生成方法

现有一个汉字助记码生成方法:即取得每个汉字的首字母组成

一个字典表tsyshelpcode如下:

c e iAutoID
---- ---- -----------
哎 a 1
哀 a 2
唉 a 3
埃 a 4
挨 a 5
锿 a 6

将汉字及其首字母一一对应放入上表。

然后写触发器,函数,存储过程等使用,函数如下:

CREATE FUNCTION F_GetHelpCode (
@cName VARCHAR(20) )
RETURNS VARCHAR(12)
AS
BEGIN
DECLARE @i SMALLINT, @L SMALLINT , @cHelpCode VARCHAR(12), @e VARCHAR(12), @iAscii SMALLINT
SELECT @i=1, @L=0 , @cHelpCode=''
while @L<=12 AND @i<=LEN(@cName) BEGIN
SELECT @e=LOWER(SUBSTRING(@cname,@i,1))
SELECT @iAscii=ASCII(@e)
IF @iAscii>=48 AND @iAscii <=57 OR @iAscii>=97 AND @iAscii <=122 or @iAscii=95
SELECT @cHelpCode=@cHelpCode +@e
ELSE
IF @iAscii>=176 AND @iAscii <=247 AND (SELECT COUNT(c) FROM TsysHelpCode WHERE c=@e)=1
SELECT @cHelpCode=@cHelpCode +(SELECT SUBSTRING(e,1,1) FROM TsysHelpCode WHERE c=@e)
ELSE SELECT @L=@L-1
SELECT @i=@i+1, @L=@L+1 END
RETURN @cHelpCode
END
GO

在PB等开发语言中,使用类似功能函数不需要汉字首字母TSYSHELPCODE表,不知道在SQLSERVER中有没有类似的方法。

直接一个函数或存储过程就能取得相关助记码
---------------------------------------------------------------

从Chiff那学来的:

--可支持大字符集20000个汉字!

create function f_ch2py(@chn nchar(1))
returns char(1)
as
begin
declare @n int
declare @c char(1)
set @n = 63

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
'丌' 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 @chn) as a
order by chn COLLATE Chinese_PRC_CI_AS
) as b
return(@c)
end

go

select dbo.f_ch2py('中') --Z
select dbo.f_ch2py('国') --G
select dbo.f_ch2py('人') --R
select dbo.f_ch2py('镆') --M

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

支持多汉字,处理字母及其他不规则字符
是什么意思啊?
---------------------------------------------------------------

一、那个方法支持多汉字。
二、如果要支持字母的话可以加入
if ascii(@c)<127
return(@c)
三、如果是其他不规则字符,你需要返回什么?

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

呜,Chiff(~o~)

我的机子上 select dbo.f_ch2py('她') 返回的是 J ,怎么办呀????

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

我先看看
---------------------------------------------------------------

create table mt(chn nchar(10))

insert into mt values('阿')
insert into mt values('你')
insert into mt values('我')
insert into mt values('她')
insert into mt values('考')

select * from mt order by chn





为什么排序会把"她"排在第二位呢?是不是多音字啊?

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

就是呀,返回J,为啥吗???
---------------------------------------------------------------

呵呵,查出来了,果然是多音字(from 金山词霸):

她2
jie
同“姐”。
郑码:ZMYI,U:5979,GBK:CBFD
笔画数:6,部首:女,笔顺编号:531525
---------------------------------------------------------------

Nod...

我也查了,果然是,这种字也不知道有多少!

谢谢Chiff(~o~) :)

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

我看看!
---------------------------------------------------------------

呵呵!找了半天!
---------------------------------------------------------------

;(
---------------------------------------------------------------

呵呵,一个很尴尬的问题。

以前还遇到过,把"洋参丸"变成“YCW”之类。

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