1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java 按拼音模糊搜索汉字_数据查询支持中文拼音首字母模糊检索

java 按拼音模糊搜索汉字_数据查询支持中文拼音首字母模糊检索

时间:2022-05-06 10:35:26

相关推荐

java 按拼音模糊搜索汉字_数据查询支持中文拼音首字母模糊检索

需求:在做软件的过程中,发现不少客户在做数据检索时,打汉字怕麻烦,也影响工作效率,要求在查询时,支持查询汉字的字母开头查询。

做到支持数据库拼音码查询,主要分一下几步实现:

1.在数据库中建立一个sys_spell_dict表,把常用的汉字与拼音字母做为对照信息存储到数据库中。下面以SQL server 数据库的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前的'%'+即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。