在应用软件中,一些基础资料的中文内容在输入时需要使用助记符号(拼音缩写)来帮助搜索和参照。那么怎么生成助记符号也是要处理的一个问题。在后台建立一个表,把计算好的助记符号存起来,就是按这个字段值来查询了。
一、汉字及拼音首字母存储到表中
CREATE TABLE IF NOT EXISTS public.x9_gnzjfh ( wz character varying(8) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar, py character varying(8) COLLATE pg_catalog."default" NOT NULL DEFAULT ''::bpchar, CONSTRAINT x9_gnzjfh_pkey PRIMARY KEY (wz) )
这里面的内容可以通过区位码等方法导入(看具体语言支持情况)。
二、检索代码
一个函数。
CREATE OR REPLACE FUNCTION public.x9_zjfh( str character varying) RETURNS character varying LANGUAGE 'plpgsql' COST 100 VOLATILE PARALLEL UNSAFE AS $BODY$ -- Description: 助记符号 -- SELECT X9_ZJFH('华岳软件126'); DECLARE s1 char(1); s2 char(1); lzf INT; l1 INT; s3 varchar(100); BEGIN lzf:=length($1); l1:=1; s3:=''; WHILE l1 <= lzf LOOP s1:=substring($1,l1,1); l1:=l1 + 1; s2:=''; SELECT py INTO s2 FROM x9_gnzjfh WHERE wz = s1; IF NOT s2 IS NULL THEN s3:=s3 || s2; CONTINUE; END IF; END LOOP; RETURN s3; END; $BODY$;
三、执行检索
SELECT X9_ZJFH('CSDN程序员技术社区')
结果:
CXYJSSQ
基础非中文部分被去掉。
四、改进
这样处理速度并不快,有更好的方法吗?
我现在这个表收录了6721个汉字,有需要可以QQ我。