需求:在做软件的过程中,发现不少客户在做数据检索时,打汉字怕麻烦,也影响工作效率,要求在查询时,支持查询汉字的字母开头查询。
做到支持数据库拼音码查询,主要分一下几步实现:
1.在数据库中建立一个sys_spell_dict表,把常用的汉字与拼音字母做为对照信息存储到数据库中。下面以SQL server 2005数据库的SQL语言格式编写实现。
<1>.先创建sys_spell_dict表。
CREATE TABLE [dbo].[sys_spell_dict]( [id] [int] NOT NULL, [char_code] [varchar](4) COLLATE Chinese_PRC_CI_AS NOT NULL, [spell_code] [varchar](1) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT [PK_sys_spell_dict] PRIMARY KEY CLUSTERED ( [char_code] ASC )) ON [PRIMARY]
<2>.你需要从网上找到常用的字与拼音对照数据导入数据表中(以下仅简单示例,常用的字库对照6800左右,请自己收集)
id | char_code | spell_code |
42 | 阿 | A |
41 | 啊 | A |
5975 | 锕 | A |
4576 | 嗄 | G |
45 | 哎 | A |
47 | 哀 | A |
46 | 唉 | A |
43 | 埃 | A |
44 | 挨 | A |
5995 | 锿 | A |
4415 | 捱 | A |
48 | 皑 | A |
49 | 癌 | A |
<3>.编写转换函数
CREATE FUNCTION [dbo].[getSpellCodeFun] (@in_char VARCHAR(100),@type VARCHAR(2)) RETURNS VARCHAR(100) AS BEGIN declare @each_char varchar(10) declare @each_py varchar(2) declare @all_py varchar(100) declare @r int declare @all_len int declare @rr int declare @pyreturn varchar(100) set @r=1 set @all_len=len(ltrim(rtrim(@in_char))) set @all_py='' while (@r<=@all_len) begin set @each_char=substring(@in_char,@r,1) select @rr=count(*) from sys_spell where @each_char=char_code if @rr>0 select @each_py=spell_code from sys_spell_dict where @each_char=char_code else begin set @each_py='' end set @all_py=@all_py+isnull(@each_py,'') set @r=@r+1 end set @pyreturn= @all_py return upper( @pyreturn ) END
<4>.中文转换拼音码测试
在查询分析器中,
select dbo.getSpellCodeFun('*','py') 将回返回‘ZHRMGHG’中文拼音首字母查询
<5>企业应用开发:1.你可以在写入数据时,把中文转成拼音码存入数据库中比如Spell字段中(处理程序需要另写)。
2.写查询语句时,利用dbo.getSpellCodeFun先转成拼音码匹配查询条件。
如人员表中有数据
id | emp_code | emp_name |
1 | 001 | 比尔 |
2 | 002 | 牛顿 |
你在写SQL时如此写即可
declare @py nvarchar(50) set @py='BE' select * from sys_emp where dbo.getSpellCodeFun(emp_name,'py') like '%'+@py+'%' 查询时将显示出中文拼音首字母为BE,即emp_name叫比尔的员工。
至此简单支持数据拼音首字母的示例就讲完了,如果你想做以XX拼音字母开头的查询,去掉@py前的'%'+即可。