T9输入法在SQL Server2005 中的实现

Create table NumberToChar ----------用来保存数字和字母之间映射的表
(
    
number  int,
    GetText 
varchar(10)
)
--字典表
select * from Dictionary
--联系人表
select * from Contact
--创建键盘表---------------------------------------------------------------------------------
create table Keys
(
 alpha 
char(1primary 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(100not 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@i1)
  
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@i1)
   
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值