• 数据查询支持中文拼音首字母模糊检索


    需求:在做软件的过程中,发现不少客户在做数据检索时,打汉字怕麻烦,也影响工作效率,要求在查询时,支持查询汉字的字母开头查询。
        做到支持数据库拼音码查询,主要分一下几步实现:
        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前的'%'+即可。

  • 相关阅读:
    文字
    <script type="text/x-template"> 模板
    防xss攻击
    url
    symmfony
    composer
    header 和http状态码
    bootstrap
    linux的设置ip连接crt,修改主机名,映射,建文件
    Centos上传下载小工具lrzsz
  • 原文地址:https://www.cnblogs.com/smartsmile/p/6234333.html
Copyright © 2020-2023  润新知