T9输入法在SQL Server2005 中的实现

2024-03-28 17:58

本文主要是介绍T9输入法在SQL Server2005 中的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Create   table  NumberToChar  -- --------用来保存数字和字母之间映射的表
(
    
number    int ,
    GetText 
varchar ( 10 )
)
-- 字典表
select   *   from  Dictionary
-- 联系人表
select   *   from  Contact
-- 创建键盘表---------------------------------------------------------------------------------
create   table  Keys
(
 alpha 
char ( 1 primary   key ,
 digit 
char ( 1 ) ,
)
insert   into  Keys(alpha, digit)  values ( ' a ' , ' 2 ' );
insert   into  Keys(alpha, digit)  values ( ' b ' , ' 2 ' );
insert   into  Keys(alpha, digit)  values ( ' c ' , ' 2 ' );
insert   into  Keys(alpha, digit)  values ( ' d ' , ' 3 ' );
insert   into  Keys(alpha, digit)  values ( ' e ' , ' 3 ' );
insert   into  Keys(alpha, digit)  values ( ' f ' , ' 3 ' );
insert   into  Keys(alpha, digit)  values ( ' g ' , ' 4 ' );
insert   into  Keys(alpha, digit)  values ( ' h ' , ' 4 ' );
insert   into  Keys(alpha, digit)  values ( ' i ' , ' 4 ' );
insert   into  Keys(alpha, digit)  values ( ' j ' , ' 5 ' );
insert   into  Keys(alpha, digit)  values ( ' k ' , ' 5 ' );
insert   into  Keys(alpha, digit)  values ( ' l ' , ' 5 ' );
insert   into  Keys(alpha, digit)  values ( ' m ' , ' 6 ' );
insert   into  Keys(alpha, digit)  values ( ' n ' , ' 6 ' );
insert   into  Keys(alpha, digit)  values ( ' o ' , ' 6 ' );
insert   into  Keys(alpha, digit)  values ( ' p ' , ' 7 ' );
insert   into  Keys(alpha, digit)  values ( ' q ' , ' 7 ' );
insert   into  Keys(alpha, digit)  values ( ' r ' , ' 7 ' );
insert   into  Keys(alpha, digit)  values ( ' s ' , ' 7 ' );
insert   into  Keys(alpha, digit)  values ( ' t ' , ' 8 ' );
insert   into  Keys(alpha, digit)  values ( ' u ' , ' 8 ' );
insert   into  Keys(alpha, digit)  values ( ' v ' , ' 8 ' );
insert   into  Keys(alpha, digit)  values ( ' w ' , ' 9 ' );
insert   into  Keys(alpha, digit)  values ( ' x ' , ' 9 ' );
insert   into  Keys(alpha, digit)  values ( ' y ' , ' 9 ' );
insert   into  Keys(alpha, digit)  values ( ' z ' , ' 9 ' );
select   *   from  Keys
-- 创建联系人T9码速查表------------------------------------------------------------------
create   table  ContactT9Info
(
 id 
int   not   null   REFERENCES  Contact(id),
 T9Code 
varchar ( 100 not   null ,
 
PRIMARY   KEY   CLUSTERED  (id, T9Code)
)
select   *   from  ContactT9Info
-- 函数:取得汉字的拼音---------------------------------------------------------------------
select  dbo.getPY( ' ' )
create   function  getPY( @word   varchar ( 5 ))
 
returns   varchar ( 10 )
as
begin
 
declare   @py   varchar ( 10 )
 
set   @py   =  ( select   top   1  py  from  dictionary
 
where  words  like   ' % '   +   @word   +   ' % ' )
 
return ( @py )
end
go

-- 函数:取得拼音的T9码---------------------------------------------------------------------
select  dbo.getT9CodeFromPY( ' huang ' )
create   function  getT9CodeFromPY( @pinyin   varchar ( 10 ))
 
returns   varchar ( 10 )
as
begin
 
declare   @i   int @length   int @alpha   char ( 1 ),  @code   varchar ( 10 )
 
set   @i   =   1
 
set   @length   =   len ( @pinyin )
 
set   @code   =   ''
 
 
while  ( @i   <=   @length )
 
begin
  
-- 对拼音的每个字母进行处理
   set   @alpha   =   substring ( @pinyin @i 1 )
  
set   @code   =   @code   +  dbo.getKeyFromAlpha( @alpha )
  
set   @i   =   @i   +   1
 
end
 
return   @code
end
go

-- 函数:取得字母的键码---------------------------------------------------------------------
select  dbo.getKeyFromAlpha( ' h ' )
create   function  getKeyFromAlpha( @alpha   char ( 1 ))
 
returns   char ( 1 )
as
begin
 
return
 (
  
select  digit  from  Keys
  
where  alpha  =   @alpha
 )
end
go

-- 存储过程:执行此存储过程创建联系人T9码速查信息数据-------------------------------------------
create   procedure  sp_createContactT9Info
as
begin
 
declare   @i   int @length   int @word   varchar ( 5 ),  @code   varchar ( 100 )
 
declare   @contactid   int @name   varchar ( 20 )
 
 
-- 先清空ContactT9Info表的数据
  delete   from  ContactT9Info
 
-- 声明一个游标取出contact表的数据,并打开此游标
  declare  contact_cursor  cursor   for
  
select  id, name  from  contact
 
open  contact_cursor
 
 
fetch   next   from  contact_cursor  into   @contactid @name
 
-- 检查@@fetch_status的值判断是否还能取得记录
  while   @@fetch_status   =   0
 
begin
  
-- 对contact_cursor中取得的每条记录进行操作
   set   @length   =   len ( @name )
  
set   @i   =   @length
  
set   @code   =   ''
 
  
while  ( @i   >=   1 )
  
begin
   
-- 从姓名的最后一个字开始,分别对每个字进行处理
    set   @word   =   substring ( @name @i 1 )
   
set   @code   =  dbo.getT9CodeFromPY(dbo.getPY( @word ))  +   @code
   
insert   into  ContactT9Info(id, T9Code)  values  ( @contactid @code )
   
set   @i   =   @i   -   1
  
end
  
fetch   next   from  contact_cursor  into   @contactid @name
 
end
 
close  contact_cursor
 
deallocate  contact_cursor
 
print   ' success! '
end
go
exec  sp_CreateContactT9Info
-- 存储过程:通过输入T9码速查联系人----------------------------------------------------------
create   procedure  sp_getContactByT9
 
@T9Code   varchar ( 100 )
as
 
select  c. *
 
from  Contact c
 
where   exists  (
  
select   *   from  ContactT9Info i
  
where  i.id  =  c.id  and  i.T9Code  like   @T9Code   +   ' % '
    )
go
exec  sp_getContactByT9  ' 264 '

-- 存储过程:显示所有联系人的信息
create   procedure  sp_showContactInfo
as
 
select  c. * ,i.T9Code  from  Contact c
 
left   join  ContactT9Info i  on  c.id  =  i.id
go
exec  sp_showContactInfo

附加一部分代码,我已经忘了是做什么用的了,看来注释确实是个好习惯

select   *   from  NumberToChar 

drop   function  Get_StrArrayLength

CREATE   function  Get_StrArrayLength

(

 
@str   varchar ( 1024 ),   -- 要分割的字符串

 
@split   varchar ( 10 )    -- 分隔符号

)

returns   int

as

begin

 
declare   @location   int

 
declare   @start   int

 
declare   @length   int

 

 
set   @str = ltrim ( rtrim ( @str ))

 
set   @location = charindex ( @split , @str )

 
set   @length = 1

 
while   @location <> 0

 
begin

   
set   @start = @location + 1

   
set   @location = charindex ( @split , @str , @start )

   
set   @length = @length + 1

 
end

 
return   @length

end

这篇关于T9输入法在SQL Server2005 中的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/856311

相关文章

SpringBoot集成P6Spy的实现示例

《SpringBoot集成P6Spy的实现示例》本文主要介绍了SpringBoot集成P6Spy的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录本节目标P6Spy简介抛出问题集成P6Spy1. SpringBoot三板斧之加入依赖2. 修改

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

Redis分布式锁中Redission底层实现方式

《Redis分布式锁中Redission底层实现方式》Redission基于Redis原子操作和Lua脚本实现分布式锁,通过SETNX命令、看门狗续期、可重入机制及异常处理,确保锁的可靠性和一致性,是... 目录Redis分布式锁中Redission底层实现一、Redission分布式锁的基本使用二、Red

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL磁盘空间不足问题解决

《MySQL磁盘空间不足问题解决》本文介绍查看空间使用情况的方式,以及各种空间问题的原因和解决方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录查看空间使用情况Binlog日志文件占用过多表上的索引太多导致空间不足大字段导致空间不足表空间碎片太多导致空间不足临时表空间

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

Spring Security重写AuthenticationManager实现账号密码登录或者手机号码登录

《SpringSecurity重写AuthenticationManager实现账号密码登录或者手机号码登录》本文主要介绍了SpringSecurity重写AuthenticationManage... 目录一、创建自定义认证提供者CustomAuthenticationProvider二、创建认证业务Us

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.