让你的查询支持中文拼音码模糊查询。

需求:在做软件的过程中,发现不少客户在做数据检索时,打汉字怕麻烦,也影响工作效率,要求在查询时,支持查询汉字的字母开头查询。
做到支持数据库拼音码查询,主要分一下几步实现:
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左右,请自己收集)
[align=center][table]
|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|
[/table][/align]
<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先转成拼音码匹配查询条件。
如人员表中有数据[table]
|id|emp_code|emp_name|
|1|001|比尔|
|2|002|牛顿|
[/table]
你在写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前的'%'+即可。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值